classSolution{public:intfindTheLongestSubstring(string s){//even:cnt%2==0 TC:O(nlogn) 4.5*10^6//slipping window cannot becasue we don't know how to move pointer to find longer substringint ans =0, status =0, n = s.length();
vector<int>pos(1<<5,-1);
pos[0]=0;for(int i =0; i < n;++i){if(s[i]=='a'){//代表元音字母的那一位异或,反正就0和1来回换,反正后面都是和0异或,只有不同才会变成1,那也就是1才会变成1,相当于没变
status ^=(1<<0);}elseif(s[i]=='e'){
status ^=(1<<1);}elseif(s[i]=='i'){
status ^=(1<<2);}elseif(s[i]=='o'){
status ^=(1<<3);}elseif(s[i]=='u'){
status ^=(1<<4);}if(pos[status]>=0){//如果前面出现过相同状态,则发现符合题意的子串,并更新最大值
ans =max(ans, i +1- pos[status]);}else{
pos[status]= i +1;//i是从0开始的}}return ans;}};