LeetCode 424. 替换后的最长重复字符

题目描述

这道题直接照搬了官方题解,接下来认真刷两道滑动窗口吧。

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

示例1:

输入:s = "ABAB", k = 2
输出:4
解释:用两个'A'替换为两个'B',反之亦然。

示例2:

输入:s = "AABABBA", k = 1
输出:4
解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-repeating-character-replacement

代码实现

class Solution {
public:
    int characterReplacement(string s, int k) {
        int p1 = 0, p2 = 0;
        int maxCharacter = 0;
        vector<int> nums(26);
        while(p2 < s.length()) {
            nums[s[p2] - 'A']++;
            maxCharacter = max(maxCharacter, nums[s[p2] - 'A']);
            if(p2 - p1 + 1 - maxCharacter > k) {
                nums[s[p1] - 'A']--;
                p1++;
            }
            p2++;
        }
        return p2 - p1;
    }
};
posted @ 2021-02-02 15:41  行者橙子  阅读(58)  评论(0编辑  收藏  举报