मान लीजिए कि हमारे पास एक लोअरकेस स्ट्रिंग s है। इसमें अंग्रेजी अक्षर के साथ-साथ "?" प्रतीक। प्रत्येक के लिए "?" हमें या तो इसे हटाना होगा या इसे किसी छोटे अक्षर से बदलना होगा। हमें अक्षर "a" से शुरू होने वाले सबसे लंबे क्रमागत रूप से बढ़ते हुए सबस्ट्रिंग की लंबाई ज्ञात करनी होगी।
इसलिए, यदि इनपुट s ="vta???defke" जैसा है, तो आउटपुट 6 होगा, क्योंकि हम s को "vtabcdefke" में बदल सकते हैं और "abcdef" सबसे लंबे समय तक लगातार बढ़ने वाला सबस्ट्रिंग है, और यह भी शुरू हो रहा है "ए"।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अधिकतम:=0
- लंबाई:=0
- qmarks:=0
- प्रत्येक c in s के लिए, करें
- यदि c "?" के समान है, तो
- qmarks:=qmark + 1
- अन्यथा,
- idx :=(सी का एएससीआईआई) - ("ए" का एएससीआईआई)
- लंबाई:=idx + 1 यदि लंबाई <=idx <=लंबाई + qmarks या idx <=qmarks अन्यथा 0
- qmarks:=0
- अधिकतम :=अधिकतम अधिकतम और (न्यूनतम लंबाई + qmarks और 26)
- यदि c "?" के समान है, तो
- अधिकतम वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s): maxlen = length = qmarks = 0 for c in s: if c == "?": qmarks += 1 else: idx = ord(c) - ord("a") length = idx + 1 if length <= idx <= length + qmarks or idx <= qmarks else 0 qmarks = 0 maxlen = max(maxlen, min(length + qmarks, 26)) return maxlen s = "vta???defke" print(solve(s))
इनपुट
"vta???defke"
आउटपुट
6