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

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

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

示例 1:

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

输出:4

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

示例 2:

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

输出:4

解释:

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

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

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

提示:

1 <= s.length <= 105^55

s 仅由大写英文字母组成

0 <= k <= s.length

滑动窗口,窗口内除数量最多的字符外,其他字符加起来不能超过k,找出最长的该窗口即可:

cpp 复制代码
class Solution {
public:
    int characterReplacement(string s, int k) {
        int left = 0;
        map<char, int> cnt;
        multiset<int> cntNum;
        int ans = 0;
        for (int i = 0; i < s.size(); ++i) {
            auto it = cntNum.find(cnt[s[i]]);
            if (it != cntNum.end()) {
                cntNum.erase(it);
            }
            ++cnt[s[i]];
            cntNum.insert(cnt[s[i]]);

            while (i - left + 1 - *cntNum.rbegin() > k) {
                auto it = cntNum.find(cnt[s[left]]);
                if (it != cntNum.end()) {
                    cntNum.erase(it);
                }
                --cnt[s[left]];
                cntNum.insert(cnt[s[left]]);
                
                ++left;
            }

            ans = max(ans, i - left + 1);
        }
        return ans;
    }
};

如果字符串s的长度为n,s中的字符种类为m,则此算法时间复杂度为O(n),空间复杂度为O(m),cntNum里最多有cnt.size()个元素。

相关推荐
艾莉丝努力练剑11 小时前
【Linux网络】网络层IP协议(三):网段划分(下)
linux·运维·服务器·网络·tcp/ip
叫我:松哥11 小时前
基于LSTM与ARIMA的城市空气质量分析与预测系统
人工智能·python·rnn·算法·机器学习·flask·lstm
j7~11 小时前
【C++】模板初阶--函数模板,类模板详解
数据结构·c++·算法·函数模板·类模板·函数模板实例化
CodeStats11 小时前
从 CPU 指令执行到权限管控:对比三大操作系统,梳理编程语言演进,解读 HTML/CSS/JS 浏览器解析的共通底层逻辑
java·linux·windows
尔染君子11 小时前
嵌入式Linux驱动开发(基于树莓派rasberrypi 5的LED驱动开发)
linux·运维·驱动开发
2601_9611940211 小时前
考研专业课在哪里参加考试|考点|流程|资料已整理
linux·考研·ubuntu·缓存·centos·负载均衡
Wireless_wifi612 小时前
Why IPQ5018 Continues to Thrive in the Wi-Fi 7 Era
linux·5g
无限码力12 小时前
阿里算法岗 0530笔试真题 - 寻找满足条件的最优子序列
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试真题·阿里算法题
das2m12 小时前
Arch Linux (WSL2) Docker 环境踩坑记
linux·docker·eureka
snow@li12 小时前
nginx:详解与速查表 / Nginx = 反向代理 + 负载均衡 + 静态服务器 + HTTP 缓存 / 请求分发、静态加速、上线不中断
linux·服务器·nginx