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
- nếu ch không có trong t_freq, thì
- 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