题目大意:
有字符串str,我们抽取连续字串,规定连续字串的a,e,i,o,u出现的次数必须是偶数次(可以是0次),问我们最长可以截取多长这个字符串。
length(str)<=1e5
解题思路:
这题我们需要先对状态进行编码,元音字母分别对应bitset的0到4位,每次遇到元音字母,我们就在相对应的位置取反。当我们遇到两个相同的状态时,这两个状态的位置相减就是合法的字符串,要使得这个字符串最长,我们只需要记录下第一次遇到这个状态的位置就可以了。
class Solution {
public:
int findTheLongestSubstring(string s) {
map<char,int> mm1;
map<int,int> mm2;
mm1['a']=1;
mm1['e']=2;
mm1['i']=4;
mm1['o']=8;
mm1['u']=16;
int n=s.size();
mm2[0]=-1;
int ans=0;
int state=0;
for(int i=0;i<n;i++){
state^=mm1[s[i]];
if(mm2.count(state)){
ans=max(ans,i-mm2[state]);
}else mm2[state]=i;
}
return ans;
}
};