मान लीजिए कि हमारे पास दो तार हैं, s और t, हमें जांचना है कि s और t पास हैं या नहीं। हम कह सकते हैं कि दो तार करीब हैं यदि हम निम्नलिखित संक्रियाओं का उपयोग करके एक को दूसरे से प्राप्त कर सकते हैं -
-
किन्हीं दो मौजूदा वर्णों का आदान-प्रदान करें। (जैसे एबीसीडी से एईसीडीबी)
-
एक मौजूदा चरित्र की प्रत्येक घटना को दूसरे मौजूदा चरित्र में बदलें, और अन्य पात्रों के साथ भी ऐसा ही करें। (जैसे acabb -> bbcbaa (यहाँ सभी a को b में बदल दिया गया है, और इसके विपरीत))
हम जितनी बार चाहें स्ट्रिंग पर संचालन का उपयोग कर सकते हैं।
इसलिए, यदि इनपुट s ="zxyyyx", t ="xyyzzz" जैसा है, तो आउटपुट सत्य होगा, क्योंकि हम 3 ऑपरेशनों में s से t प्राप्त कर सकते हैं। ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz"), और ("yxxzzz" -> "xyyzzz")।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
यदि s और t में कोई असामान्य वर्ण है, तो
-
झूठी वापसी
-
-
a :=s में वर्णों के सभी आवृत्ति मानों की सूची
-
b :=t में वर्णों के सभी आवृत्ति मानों की सूची
-
सूची को क्रमबद्ध करें एक
-
सूची को क्रमबद्ध करें b
-
यदि a, b के समान नहीं है, तो
-
झूठी वापसी
-
-
सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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