假设我们有字符串s,我们必须找到包含每个元音的偶数次的最长子字符串的大小。也就是说,“ a”,“ e”,“ i”,“ o”和“ u”必须出现偶数次。因此,如果字符串类似于“ helloworld”,则输出为8。
为了解决这个问题,我们将遵循以下步骤-
ret:= 0,定义两个映射m和cnt,设置m [“ 00000”]:= -1
将元音存储到元音数组中
对于范围从0到s的i
x:= s [i],好的:= false
将cnt [x]加1,设置temp:=空字符串
对于0到4范围内的k:temp:= temp +'0'+ cnt [vowels [k]] mod 2
如果m具有温度,则ret:= ret和i – m [temp]的最大值,否则m [temp]:= i
返回ret
让我们看下面的实现以更好地理解-
#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