滑动窗口系列-Leetcode 424. 替换后的最长重复字符

问题描述

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。

注意:
字符串长度 和 k 不会超过 104。

输入:
s = “AABABBA”, k = 1

输出:
4

解释:
将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。
子串 “BBBB” 有最长重复字母, 答案为 4。

解题报告

不解释,看代码。

实现代码

class Solution {
public:
    int characterReplacement(string s, int k) {
        vector<int>window(26,0);
        int maxx=0, l=0,r=0,idx,ans=0;
        while(r<s.size()){
            idx=s[r]-'A';
            window[idx]++;
            maxx=max(maxx, window[idx]);
            if(r-l+1-maxx>k){
                idx=s[l]-'A';
                window[idx]--;
                l++;
            }
            ans=max(ans, r-l+1);
            r++;
        }
        return ans;
    }
};

参考资料

[1] Leetcode 424. 替换后的最长重复字符

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