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; 

原文地址:https://www.cnblogs.com/apo2019/p/13282589.html