মান লইয়া s স্ট্রিংটি, আমাদের প্রতিটি স্বরবর্ণ জোড় সংখ্যক বার থাকা সবচেয়ে লম্বা সাবস্ট্রিংর সাইজ খুঁজে বের করতে হবে। অর্থাৎ, 'a', 'e', 'i', 'o', এবং 'u' অবশ্যই জোড় সংখ্যক বার আওয়ার হবে। তাই যদি স্ট্রিংটি "helloworld" হয়, তবে আউটপুট হবে ৮।
এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব −
ret := 0, দুটি মэপ m এবং cnt ডিফাইন করো, m["00000"] := -1 সেট করো
স্বরবর্ণগুলো vowels অ্যারেতে স্টোর করো
i = 0 থেকে s-এর সাইজ পর্যন্ত লুপ চলাও
x := s[i], এবং ok := false
cnt[x]-কে ১ বাড়াও, temp := খালি স্ট্রিং সেট করো
k = 0 থেকে ৪ পর্যন্ত: temp := temp + '0' + cnt[vowels[k]] mod 2
যদি m-এ temp থাকে, তবে ret := max(ret, i - m[temp]), অন্যথায় m[temp] := i
ret রিটার্ন করো
উদাহরণ (C++)
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন −
#include <bits/stdc++.h>
using 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