Login light
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
using namespace std;

class Solution {
public:
    int findTheLongestSubstring(string s) {
        int ans = 0, status = 0, n = s.length();
        //定义数组5bit长度,默认值-1,用来M记录每个状态的位置,一共有1<<5-1种状态
        vector<int> pos(1 << 5, -1);
        //status==0为成功
        pos[0] = 0;
        //遍历s
        for (int i = 0; i < n; ++i) {
            if (s[i] == 'a') {
                //取反,记录当前状态
                status = status ^ 1<<0;
            } else if (s[i] == 'e') {
                status = status ^ 1<<1;
            } else if (s[i] == 'i') {
                status = status ^ 1<<2;
            } else if (s[i] == 'o') {
                status = status ^ 1<<3;
            } else if (s[i] == 'u') {
                status = status ^ 1<<4;
            }
            /*
            判断是否符合题意:
            当pos[status] == -1 说明这个位置还没有记录过,写入当前的坐标
            当pos[status] >= 0  说明这个位置有记录,计算是否大于ans,若是,更新ans
            0123456
            */
            if (pos[status] >= 0) {
                //这个状态有记录,说明这个状态出现过,计算长度更新ans
                ans = max(ans, i - pos[status] + 1);
            } else {
                //记录第一次出现这个状态的下标 + 1,因为不能包含
                pos[status] = i + 1;
            }
        }
        return ans;
    }
};

int main()
{
    string inputStr = "eleetminicoworoep";//leetminicowor
    Solution solution;
    cout << solution.findTheLongestSubstring(inputStr) << endl;
    return 0;
}