滑動窗口系列-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. 替換後的最長重複字符

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