Leetcode 424. 替換後的最長重複字符 (雙指針滑動窗口)

        // 維護一個窗口,滿足窗口長度-窗口中的重複字母的最大個數<=k
        // 窗口中重複字符的最大個數不好維護,因爲當滑動窗口改變時,這個個數會變
        // 一種方案是枚舉26個字母,然後枚舉窗口中字符的最大個數。

這種方法更加直觀。不容易出錯。

class Solution {
public:
    int characterReplacement(string s, int k) {
        // 維護一個窗口,滿足窗口長度-窗口中的重複字母的最大個數<=k
        // 窗口中重複字符的最大個數不好維護,因爲當滑動窗口改變時,這個個數會變
        // 一種方案是枚舉26個字母
        int res = 0;
        for(char c='A';c<='Z';c++){
            int count = 0;
            for(int i=0,j=0;j<s.size();j++){
                if(s[j]==c) count++;
                while(j-i+1-count>k){
                    if(s[i]==c) count--;
                    i++;
                }
                res = max(res,j-i+1);
            }
        }
        return res;
    }
};

另外還有特殊的方法是不需要維護窗口的最大值,這個比較巧妙,在這裏就不展開了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章