Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem tần số của ký tự trong một chuỗi là một hệ số hay bội số của cùng một ký tự trong chuỗi khác bằng Python

Giả sử chúng ta có hai chuỗi s và t, chúng ta phải kiểm tra xem số lần xuất hiện của một ký tự trong s là bội số hay là một hệ số trong t.

Vì vậy, nếu đầu vào giống như s ="xxyzzw" t ="yyyxxxxzz", thì đầu ra sẽ là True vì tần số của x trong s là 2 và trong t là 4, trong s thì y chỉ xuất hiện một lần, nhưng ở t thì là ba chữ y, có cùng số z trong s và t và có một w trong s nhưng không ở t.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • s_freq:=một bản đồ với tất cả các ký tự ở s và tần số của chúng
  • t_freq:=một bản đồ có tất cả các ký tự trong t và tần số của chúng
  • đối với mỗi ch trong s_freq, thực hiện
    • nếu ch không có trong t_freq, thì
      • chuyển sang lần lặp tiếp theo
    • nếu t_freq [ch] chia hết cho s_freq [ch] hoặc s_freq [ch] chia hết cho t_freq [ch], thì
      • chuyển sang lần lặp tiếp theo
    • nếu không,
      • trả về Sai
  • trả về True

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

"xxyzzw", "yyyxxxxzz"

Đầu ra

True