मान लीजिए कि हमारे पास चार संभावित वर्ण "1", "2", "3" और "?" के साथ एक स्ट्रिंग है। हम "?" के स्थान पर "1", "2" और "3" में से किसी एक को रख सकते हैं। हमें वह सबसे छोटी संभव संख्या ज्ञात करनी है जिसे हम ऐसा बना सकें कि कोई भी दो आसन्न अंक समान न हों।
इसलिए, यदि इनपुट s ="2??3?" जैसा है, तो आउटपुट 21231
होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मैं :=0
- s :=s से तत्वों की सूची
- यदि s <2 का आकार है, तो
- यदि s[i] "?" के समान है, तो
- वापस "1"
- यदि s[i] "?" के समान है, तो
- जबकि मैं
- यदि s[i] "?" के समान है, तो
- यदि मैं 0 के समान है, तो
- s[i] :="1" जब s[i + 1] "1" नहीं है अन्यथा "2"
- अन्यथा जब i> 0 और i <=s - 2 का आकार, तब
- यदि s[i - 1] "1" के समान है, तो
- यदि s[i + 1] "2" के समान है, तो
- s[i] :="3"
- अन्यथा,
- s[i] :="2"
- यदि s[i + 1] "2" के समान है, तो
- अन्यथा जब s[i - 1] "2" के समान हो, तो
- यदि s[i + 1] "2" के समान है, तो
- s[i] :="3"
- अन्यथा,
- s[i] :="1"
- यदि s[i + 1] "2" के समान है, तो
- अन्यथा जब s[i - 1] "3" के समान हो, तो
- यदि s[i + 1] "2" के समान है, तो
- s[i] :="2"
- अन्यथा,
- s[i] :="1"
- यदि s[i + 1] "2" के समान है, तो
- यदि s[i - 1] "1" के समान है, तो
- अन्यथा,
- s[i] :="1" जब s[i - 1] "1" नहीं है अन्यथा "2"
- i :=i + 1
- यदि s[i] "?" के समान है, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s): i = 0 s = list(s) if len(s) < 2: if s[i] == "?": return "1" while i < len(s): if s[i] == "?": if i == 0: s[i] = "1" if s[i + 1] != "1" else "2" elif i > 0 and i <= len(s) - 2: if s[i - 1] == "1": if s[i + 1] == "2": s[i] = "3" else: s[i] = "2" elif s[i - 1] == "2": if s[i + 1] == "1": s[i] = "3" else: s[i] = "1" elif s[i - 1] == "3": if s[i + 1] == "1": s[i] = "2" else: s[i] = "1" else: s[i] = "1" if s[i - 1] != "1" else "2" i += 1 return "".join(s) s = "2??3?" print(solve(s))
इनपुट
"2??3?"
आउटपुट
21231