मान लीजिए कि हमारे पास समान लंबाई के दो तार s और t हैं। एक ऑपरेशन पर विचार करें जहां हम एक स्ट्रिंग में दो इंडेक्स चुनते हैं (जरूरी नहीं कि अलग हों) और चयनित इंडेक्स पर वर्णों को स्वैप करें। हमें यह जांचना होगा कि क्या दोनों स्ट्रिंग्स को एक ही स्ट्रिंग पर अधिक से अधिक एक स्ट्रिंग स्वैप करके समान बनाना संभव है या नहीं।
इसलिए, यदि इनपुट s ="hello" t ="hlelo" जैसा है, तो आउटपुट ट्रू होगा क्योंकि हमें 'e' और 'l' को s या t में समान बनाने के लिए स्वैप करना होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
max_diffs:=2
-
अंतर:=0
-
सेंट:=एक नया सेट
-
st2 :=एक नया सेट
-
मैं के लिए 0 से s के आकार की सीमा में, ऐसा करें
-
यदि s[i] t[i] के समान नहीं है, तो
-
अंतर :=अंतर + 1
-
-
अगर s[i] सेंट में मौजूद नहीं है, तो
-
s[i] सेंट में डालें
-
-
अगर t[i] st2 में मौजूद नहीं है, तो
-
t[i] को st2 में डालें
-
-
अगर अंतर> max_diffs, तो
-
झूठी वापसी
-
-
-
सही लौटें यदि (अंतर 0 के समान है या अंतर 2 के समान है) और st का आकार st2 के आकार के समान है और st st2 के समान है, अन्यथा गलत है
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(s, t): max_diffs=2 diffs=0 st = set() st2 = set() for i in range(len(s)): if s[i] != t[i]: diffs+=1 if s[i] not in st: st.add(s[i]) if t[i] not in st2: st2.add(t[i]) if diffs > max_diffs: return False return (diffs == 0 or diffs == 2) and len(st) == len(st2) and st == st2 s = "hello" t = "hlelo" print(solve(s, t))
इनपुट
"hello", "hlelo"
आउटपुट
True