uacs2024

导航

leetcode 1456. 定长子串中元音的最大数目

1456. 定长子串中元音的最大数目

法一:借助队列

class Solution {
public:
    int maxVowels(string s, int k) {
        int size = s.size(), resMax = 0;
        queue<bool> qVowel;
        for(int i = 0;i < k;i++){
            if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
                resMax++;qVowel.emplace(true);
            }
            else  qVowel.emplace(false);
        }
        
        int now = resMax;
        for(int i = k;i < size;i++){
            if(qVowel.front() == true)  now--;
            qVowel.pop();
            if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
                now++;qVowel.emplace(true);
            }
            else  qVowel.emplace(false);
            if(resMax < now)  resMax = now;    
        }
        return resMax;
    }
};

 法二:不使用队列,每次窗口移动都判断一次旧窗头和新窗尾

class Solution {
public:
    int maxVowels(string s, int k) {
        int size = s.size(), resMax = 0;
        for(int i = 0;i < k;i++){
            if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
                resMax++;
            }
        }

        int now = resMax;
        for(int i = k;i < size;i++){
            if(s[i-k] == 'a' || s[i-k] == 'e' || s[i-k] == 'i' || s[i-k] == 'o' || s[i-k] == 'u')  now--;
            if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
                now++;
            }
            if(resMax < now)  resMax = now;    
        }
        return resMax;
    }
};

 

posted on 2024-12-01 13:59  ᶜʸᵃⁿ  阅读(13)  评论(0)    收藏  举报