Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าความถี่ของอักขระในสตริงหนึ่งเป็นปัจจัยหรือหลายความถี่ของอักขระเดียวกันในสตริงอื่นใน Python


สมมติว่าเรามีสองสตริง 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] ลงตัว
      • ติดตามตอนต่อไป
    • มิฉะนั้น
      • คืนค่าเท็จ
  • คืนค่า 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