मान लीजिए कि हमारे पास दो स्ट्रिंग्स s और t हैं जिनमें केवल तीन अक्षर 'A', 'B' और '#' हैं। हमें यह जांचना होगा कि क्या इन कार्यों को s पर निष्पादित करके s को t में बदलना संभव है।
- 'ए' केवल बाईं ओर जा सकता है
- 'B' केवल दायीं ओर जा सकता है
- न तो 'ए' और न ही 'बी' एक दूसरे को पार कर सकते हैं
इसलिए, यदि इनपुट s ="##AB##B" t ="A###B#B" जैसा है, तो आउटपुट सही होगा क्योंकि s A आसानी से सबसे बाईं ओर की स्थिति में जा सकता है, और मध्य B एक कदम दाईं ओर जा सकते हैं
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- s :=s से वर्ण लेकर एक सूची
- t :=t से वर्ण लेकर एक सूची
- यदि s का आकार t के आकार के समान नहीं है, तो
- झूठी वापसी
- यदि s और t में 'A' की संख्या भिन्न है या s और t में 'B' की संख्या भिन्न है या, तो
- झूठी वापसी
- i के लिए 0 से लेकर s-1 के आकार तक के लिए
- यदि s[i] '#' के समान नहीं है, तो
- जे के लिए 0 से टी -1 के आकार में, करो
- अगर (t[j] s[i] के समान नहीं है) और t[j] '#' के समान नहीं है, तो
- झूठी वापसी
- यदि t[j], s[i] के समान है, तो
- t[j] :='#'
- यदि s[i] 'A' और i
- झूठी वापसी
- यदि s[i] 'B' के समान है और i> j, तो
- झूठी वापसी
- लूप से बाहर आएं
- अगर (t[j] s[i] के समान नहीं है) और t[j] '#' के समान नहीं है, तो
- जे के लिए 0 से टी -1 के आकार में, करो
- यदि s[i] '#' के समान नहीं है, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s, t): s = list(s) t = list(t) if len(s) != len(t): return False if s.count('A') != t.count('A') or s.count('B') != t.count('B'): return False for i in range(len(s)): if s[i] != '#': for j in range(len(t)): if (t[j] != s[i]) and t[j] != '#': return False if t[j] == s[i]: t[j] = '#' if s[i] == 'A' and i < j: return False if s[i] == 'B' and i > j: return False break return True s = "##AB##B" t = "A###B#B" print (solve(s, t))
इनपुट
"##AB##B", "A###B#B"
आउटपुट
True