原题目:https://leetcode-cn.com/problems/find-the-longest-substring-containing-vowels-in-even-counts/
思路:使用二进制数(00000),每一位代表元音出现的次数(1为奇数,0为偶数)。出现的情况共有32中,所以我们使用一个大小为32的pos数组,来存储相应状态是否出现,然后利用前缀和,就可以计算出结果了。
本题使用到一下数学知识:奇数-奇数=偶数,偶数-偶数=偶数。
代码:
class Solution {
public:
int findTheLongestSubstring(string s) {
int ans = 0, status = 0, n = s.length();
vector<int> pos(32, -1);//pos的大小是32
pos[0] = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == 'a') {
status ^= 1<<0;
} else if (s[i] == 'e') {
status ^= 1<<1;
} else if (s[i] == 'i') {
status ^= 1<<2;
} else if (s[i] == 'o') {
status ^= 1<<3;
} else if (s[i] == 'u') {
status ^= 1<<4;
}
if (pos[status]!=-1) {
ans = max(ans, i + 1 - pos[status]);
} else {
pos[status] = i + 1;
}
}
return ans;
}
};