สมมติว่าเรามีสองสตริง s และ t เราต้องตรวจสอบว่าการปรากฏของอักขระใน s มีหลายตัวหรือปัจจัยใน t
ดังนั้น หากอินพุตเป็น s ="xxyzzw" t ="yyyxxxxzz" ผลลัพธ์จะเป็น True เนื่องจากความถี่ของ x ใน s คือ 2 และใน t คือ 4 ใน s y จะมีเพียงครั้งเดียว แต่ใน t นั้น คือ y สามตัว มีจำนวน z ใน s และ t เท่ากัน และมีหนึ่ง w ใน s แต่ไม่มีใน t
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- s_freq :=แผนที่ที่มีอักขระทั้งหมดเป็น s และความถี่
- t_freq :=แผนที่ที่มีอักขระทั้งหมดเป็น t และความถี่
- สำหรับแต่ละ ch ใน s_freq ทำ
- ถ้า ch ไม่อยู่ใน t_freq แล้ว
- ติดตามตอนต่อไป
- ถ้า t_freq[ch] หารด้วย s_freq[ch] หรือ s_freq[ch] หารด้วย t_freq[ch] ลงตัว
- ติดตามตอนต่อไป
- มิฉะนั้น
- คืนค่าเท็จ
- ถ้า ch ไม่อยู่ใน t_freq แล้ว
- คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import defaultdict def solve(s, t): s_freq = defaultdict(int) t_freq = defaultdict(int) for i in range(0, len(s)): s_freq[s[i]] += 1 for i in range(0, len(t)): t_freq[t[i]] += 1 for ch in s_freq: if ch not in t_freq: continue if t_freq[ch] % s_freq[ch] == 0 or s_freq[ch] % t_freq[ch] == 0: continue else: return False return True s = "xxyzzw" t = "yyyxxxxzz" print(solve(s, t))
อินพุต
"xxyzzw", "yyyxxxxzz"
ผลลัพธ์
True