मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं, हमें जांचना है कि s में एक वर्ण की घटनाएं t में गुणक या भाजक हैं या नहीं।
इसलिए, यदि इनपुट s = "xxyzzw", t = "yyyxxxxzz" है, तो आउटपुट True होगा क्योंकि s में x की आवृत्ति 2 है, और t में 4 है, s में y केवल एक बार मौजूद है, लेकिन t में तीन y हैं, s और t में z की संख्या समान है और s में एक w है लेकिन t में नहीं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- s_freq := s में सभी वर्णों और उनकी आवृत्तियों वाला मैप
- t_freq := t में सभी वर्णों और उनकी आवृत्तियों वाला मैप
- s_freq में प्रत्येक ch के लिए, करें
- यदि ch, t_freq में नहीं है, तो
- अगले पुनरावृत्ति के लिए जाएं
- यदि t_freq[ch], s_freq[ch] से विभाज्य है या s_freq[ch], t_freq[ch] से विभाज्य है, तो
- अगले पुनरावृत्ति के लिए जाएं
- अन्यथा,
- False लौटाएं
- यदि 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