【LeetCode 1371】 Find the Longest Substring Containing Vowels in Even Counts

題目描述

Given the string s, return the size of the longest substring containing each vowel an even number of times. That is, ‘a’, ‘e’, ‘i’, ‘o’, and ‘u’ must appear an even number of times.

Example 1:

Input: s = "eleetminicoworoep"
Output: 13
Explanation: The longest substring is "leetminicowor" which contains two each of the vowels: e, i and o and zero of the vowels: a and u.

Example 2:

Input: s = "leetcodeisgreat"
Output: 5
Explanation: The longest substring is "leetc" which contains two e's.

Example 3:

Input: s = "bcbcbc"
Output: 6
Explanation: In this case, the given string "bcbcbc" is the longest because all vowels: a, e, i, o and u appear zero times.

Constraints:

1 <= s.length <= 5 x 10^5
s contains only lowercase English letters.

思路

狀態壓縮,用2^5位標記每個元音當前個數的奇偶情況mask,當前位置和該mask上次出現的位置之差,就是符合的字符串長度。

代碼

class Solution {
public:
    int findTheLongestSubstring(string s) {
        int n = s.length();
        char c[5] = {'a', 'e', 'i', 'o', 'u'};
        vector<int> h(32, n+1);
        h[0] = -1;
        int mask = 0;
        int ans = 0;
        
        for (int i=0; i<n; ++i) {
            for (int j=0; j<5; ++j) {
                if (s[i] == c[j]) {
                    mask ^= (1<<j);
                }
            }
            ans = max(ans, i - h[mask]);
            h[mask] = min(h[mask], i);
        }
        
        return ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章