力扣(LeetCode)算法_C++——替换后的最长重复字符

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。

在执行上述操作后,返回包含相同字母的最长子字符串的长度。

示例 1:

输入:s = "ABAB", k = 2

输出:4

解释:用两个'A'替换为两个'B',反之亦然。

示例 2:

输入:s = "AABABBA", k = 1

输出:4

解释:

将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。

子串 "BBBB" 有最长重复字母, 答案为 4。

可能存在其他的方法来得到同样的结果。

cpp 复制代码
    int characterReplacement(string s, int k) {
        //int ans = 0;
        int left = 0, right = 0, maxCnt = 0;
        int fre[26] = {0};
        while (right < s.size()) {
            fre[s[right] - 'A']++;
            maxCnt = max(maxCnt, fre[s[right] - 'A']);

            if (right - left + 1 - maxCnt > k) {
                //ans = ans < (right - left) ? (right - left) : ans;
                fre[s[left] - 'A']--;
                left++;
            }

            right++;
        }

        //ans = ans < (right - left) ? (right - left) : ans;
        //return ans;
        return right - left;
    }
相关推荐
ahadee10 分钟前
蓝桥杯每日真题 - 第12天
c++·vscode·算法·蓝桥杯
zhentiya23 分钟前
微积分第五版课后习题答案详解PDF电子版 赵树嫄
算法·pdf
vortex532 分钟前
解决 VSCode 中 C/C++ 编码乱码问题的两种方法
c语言·c++·vscode
luky!1 小时前
算法--解决熄灯问题
python·算法
鸽鸽程序猿1 小时前
【算法】【优选算法】二分查找算法(下)
java·算法·二分查找算法
_OLi_1 小时前
力扣 LeetCode 150. 逆波兰表达式求值(Day5:栈与队列)
算法·leetcode·职场和发展
远望清一色1 小时前
基于MATLAB身份证号码识别
开发语言·图像处理·算法·matlab
醉颜凉2 小时前
【NOIP提高组】潜伏者
java·c语言·开发语言·c++·算法
hunandede2 小时前
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三.2:avpacket中包含多个 NALU如何解析头部分析
c++·ffmpeg·音视频
lapiii3582 小时前
图论-代码随想录刷题记录[JAVA]
java·数据结构·算法·图论