11.状态压缩
class Solution {
public:
int findTheLongestSubstring(string s) {
/*需要找到状态为0的子序列[i,j],[i,j]=[0,j]-[0,i](两者状态相同时的差)
*/
int state=0,ans=0;
vector<int> p(32,INT_MAX);
p[0]=-1;
for(int i=0;i<s.size();i++){
switch(s[i]){
case 'a':state^=1;break;
case 'e':state^=2;break;
case 'i':state^=4;break;
case 'o':state^=8;break;
case 'u':state^=16;break;
default:break;
}
if(p[state]==INT_MAX)p[state]=i;
else ans=max(ans,i-p[state]);
}
return ans;
}
};
题目:找到元音为偶数的最长子串。
ps:状态0的值应为-1;

浙公网安备 33010602011771号