'a':00001
'e':00010
'i':00100
'o':01000
'u':10000
经过偶数次变化状态不变,所以记录两次相同状态出现的位置之间的长度,这个子串的元音肯定出现了偶数次
此外因为状态0本身是元音出现偶数次,所以要加1,用vis记录状态第一次出现的位置
class Solution {
public:
int findTheLongestSubstring(string s) {
int state = 0x0;
map<int, int> vis;
vis[state] = -1;
int maxlen = 0;
for(int i = 0; i < s.length(); i++)
{
if(s[i] == 'a')
state ^= 0x00001;
if(s[i] == 'e')
state ^= 0x00010;
if(s[i] == 'i')
state ^= 0x00100;
if(s[i] == 'o')
state ^= 0x01000;
if(s[i] == 'u')
state ^= 0x10000;
if(vis.count(state))
maxlen = max(maxlen, i - vis[state]);
else
vis[state] = i;
}
return maxlen;
}
};