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;
    }
};

另外还有特殊的方法是不需要维护窗口的最大值,这个比较巧妙,在这里就不展开了。

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