1371. 每个元音包含偶数次的最长子字符串
思路:元音字母一共有五个,它们的个数状态有两种(奇数、偶数,用1表示奇数,0表示偶数),那么对应的组合情况一共是2^5=32种。如果[0,i]与[0,j]的状态一样,那么[i+1,j]之间元音字母一定都为偶数个。特别要注意的是等于0的时候,如果[0,j]=0,那么这一段就是符合要求的字符串。
class Solution {
public:
int findTheLongestSubstring(string s) {
int n=s.size();
vector<int > v(1<<5,INT_MAX);
v[0]=-1;
int cur=0;
int maxx=0;
for(int i=0;i<n;i++){
if(s[i]=='a'){
cur=cur^1;
}else if(s[i]=='e'){
cur=cur^2;
}else if(s[i]=='i'){
cur=cur^4;
}else if(s[i]=='o'){
cur=cur^8;
}else if(s[i]=='u'){
cur=cur^16;
}
if(v[cur]==INT_MAX) v[cur]=i;
else{
maxx=max(maxx,i-v[cur]);
}
}
return maxx;
}
};