मान लीजिए हमारे पास स्ट्रिंग s है, हमें प्रत्येक वॉवेल को सम संख्या में समाहित करने वाली सबसे लंबी सबस्ट्रिंग का आकार ढूंढना है। यानी, 'a', 'e', 'i', 'o', और 'u' को सम संख्या में प्रकट होना चाहिए। इसलिए यदि स्ट्रिंग "helloworld" जैसी है, तो आउटपुट 8 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
ret := 0, दो मैप्स m और cnt परिभाषित करें, m["00000"] := -1 सेट करें
वॉवेल्स को वॉवेल्स एरे में स्टोर करें
i को 0 से s के आकार तक रेंज में लूप करें
x := s[i], और ok := false
cnt[x] को 1 से बढ़ाएं, temp := खाली स्ट्रिंग सेट करें
k को 0 से 4 तक रेंज में: temp := temp + '0' + cnt[vowels[k]] mod 2
यदि m में temp है, तो ret := max of ret and i - m[temp], अन्यथा m[temp] := i
ret लौटाएं
उदाहरण (C++)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#includeusing namespace std; class Solution { public: int findTheLongestSubstring(string s) { int ret = 0; map m; map cnt; m["00000"] = -1; char vowels[5] = {'a', 'e', 'i', 'o', 'u'}; for(int i = 0; i < s.size(); i++){ char x = s[i]; bool ok = false; cnt[x]++; string temp = ""; for(int k = 0; k < 5; k++){ temp+= ('0' + (cnt[vowels[k]] % 2)); } if(m.count(temp)){ ret = max(ret, i - m[temp]); } else{ m[temp] = i; } } return ret; } }; main(){ Solution ob; cout << (ob.findTheLongestSubstring("helloworld")); }
इनपुट
"helloworld"
आउटपुट
8