मान लीजिए कि हमारे पास दो तार S और T हैं, हमें यह जांचना है कि क्या समान लंबाई की एक स्ट्रिंग जो शब्दावली की दृष्टि से S से बड़ी है और T से छोटी है। यदि ऐसी कोई स्ट्रिंग उपलब्ध नहीं है, तो हमें -1 वापस करना होगा। हमें यह ध्यान रखना होगा कि S =S1S2… Sn को शब्दावली की दृष्टि से T =T1T2… Tn से कम कहा जाता है, बशर्ते कि कोई i मौजूद हो, ताकि S1=T1, S2=T2, … Si – 1=Ti – 1, सी <ती.
इसलिए, यदि इनपुट S ="bbb" और T ="ddd" जैसा है, तो आउटपुट "bbc" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=स्ट्रिंग का आकार
- मैं के लिए n - 1 से 0 की श्रेणी में, 1 से घटाएं
- यदि स्ट्रिंग [i] 'z' के समान नहीं है, तो
- k :=ASCII का (स्ट्रिंग[i])
- स्ट्रिंग[i] :=ASCII से वर्ण (k + 1)
- स्ट्रिंग वर्णों में शामिल हों और वापस लौटें
- स्ट्रिंग[i] :='ए'
- यदि स्ट्रिंग [i] 'z' के समान नहीं है, तो
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def find_next(string): n = len(string) for i in range(n - 1, -1, -1): if string[i] != 'z': k = ord(string[i]) string[i] = chr(k + 1) return ''.join(string) string[i] = 'a' S = "bbb" T = "ddd" S = list(S) res = find_next(S) if res != T: print(res) else: print(-1)
इनपुट
"bbb", "ddd"
आउटपुट
bbc