मान लीजिए कि हमारे पास एक स्ट्रिंग s (लोअरकेस) है, हमें सबसे लंबे सबस्ट्रिंग की लंबाई ज्ञात करनी है, जहां प्रत्येक स्वर सम संख्या में आता है।
इसलिए, यदि इनपुट s ="anewcoffeepot" जैसा है, तो आउटपुट 10 होगा, क्योंकि "wcoffeepot" के विकल्प में दो स्वर "o" और "e" हैं, जो दोनों दो बार आते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
स्वर:=स्वर और संख्यात्मक मान निर्दिष्ट करने वाला नक्शा {a:0, e:1, i:2, o:3, u:4}
-
उपसर्ग :=एक खाली नक्शा और उसमें एक कुंजी-मान युग्म (0, -1) डालें
-
मुखौटा:=0, एन:=एस का आकार, रेस:=0
-
मेरे लिए 0 से n की सीमा में, करें
-
अगर s[i] एक स्वर है, तो
-
मास्क:=मास्क XOR (2^स्वर[s[i]])
-
-
यदि मास्क उपसर्ग में नहीं है, तो
-
उपसर्ग [मुखौटा]:=मैं
-
-
अन्यथा,
-
रेस :=अधिकतम रेस और (i − प्रीफ़िक्स[मास्क])
-
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution:
def solve(self, s):
vowels = {"a": 0, "e": 1, "i": 2, "o": 3, "u": 4}
prefix = {0: −1}
mask = 0
n = len(s)
res = 0
for i in range(n):
if s[i] in vowels:
mask ^= 1 << vowels[s[i]]
if mask not in prefix:
prefix[mask] = i
else:
res = max(res, i − prefix[mask])
return res
ob = Solution()
s = "anewcoffeepot"
print(ob.solve(s)) इनपुट
"anewcoffeepot"
आउटपुट
10