मान लीजिए कि हमारे पास स्ट्रिंग s है, हमें सबसे लंबे सबस्ट्रिंग का आकार ज्ञात करना है जिसमें प्रत्येक स्वर सम संख्या में हो। अर्थात्, 'a', 'e', 'i', 'o', और 'u' को सम संख्या में बार-बार आना चाहिए। तो अगर स्ट्रिंग "helloworld" की तरह है, तो आउटपुट 8 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ret :=0, दो मानचित्र m और cnt परिभाषित करें, m[“00000”] सेट करें:=-1
-
स्वरों को स्वर सरणी में संग्रहित करें
-
मैं के लिए 0 से s के आकार की सीमा में
-
x :=s[i], और ठीक :=false
-
cnt [x] 1 से बढ़ाएँ, अस्थायी सेट करें:=खाली स्ट्रिंग
-
k के लिए 0 से 4 की सीमा में:अस्थायी:=अस्थायी + '0' + cnt [स्वर [k]] मॉड 2
-
यदि m में अस्थायी है, तो ret :=ret का अधिकतम और i – m[temp], अन्यथा m[temp] :=i
-
-
वापसी रिट
उदाहरण (C++)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findTheLongestSubstring(string s) {
int ret = 0;
map <string, int> m;
map <char, int> 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