मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं, हमें जांचना है कि s और t क्लोज हैं या नहीं। हम कह सकते हैं कि दो स्ट्रिंग्स क्लोज हैं यदि हम निम्नलिखित ऑपरेशन्स का उपयोग करके एक को दूसरे से प्राप्त कर सकते हैं:
- किसी भी दो मौजूदा वर्णों का आदान-प्रदान करें। (जैसे abcde से aecdb)
- एक मौजूदा वर्ण की हर घटना को दूसरे मौजूदा वर्ण में बदलें, और दूसरे वर्णों के साथ भी ऐसा ही करें। (जैसे aacabb -> bbcbaa (यहां सभी a को b में बदल दिया गया है, और इसके विपरीत))
हम किसी भी स्ट्रिंग पर ऑपरेशन्स का उपयोग जितनी बार चाहें कर सकते हैं।
उदाहरण के लिए, यदि इनपुट है s = "zxyyyx", t = "xyyzzz", तो आउटपुट true होगा, क्योंकि हम s से t को 3 ऑपरेशन्स में प्राप्त कर सकते हैं। ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz"), और ("yxxzzz" -> "xyyzzz")।
समाधान के चरण
- यदि
sऔरtमें कोई असामान्य वर्ण है, तो:Falseवापस करें
a :=sमें वर्णों की सभी आवृत्ति मानों की सूचीb :=tमें वर्णों की सभी आवृत्ति मानों की सूचीaसूची को सॉर्ट करेंbसूची को सॉर्ट करें- यदि
a != b, तो:Falseवापस करें
Trueवापस करें
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
from collections import Counter
def solve(s, t):
if set(s) != set(t):
return False
a = list(Counter(s).values())
b = list(Counter(t).values())
a.sort()
b.sort()
if a != b:
return False
return True
s = "zxyyyx"
t = "xyyzzz"
print(solve(s, t))
इनपुट
"zxyyyx", "xyyzzz"
आउटपुट
True