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