मान लीजिए कि हमारे पास दो तार हैं, 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