当前位置:网站首页>LeetCode_424_替换后的最长重复字符
LeetCode_424_替换后的最长重复字符
2022-08-04 12:46:00 【Fitz1318】
题目链接
题目描述
给你一个字符串 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 <= 10^5s仅由大写英文字母组成0 <= k <= s.length
解题思路
双指针滑动窗口法
可以先退化成考虑K=0的情况,此时题目就变成了求解字符串中最长连续子串长度的问题了。如下图所示

窗口从左到右不断扩张/滑动,当窗口到了字符串末尾字符时,运算结束,窗口的宽度就是最终结果。
初始窗口的宽度为1,我们不断的通过向当前窗口覆盖的子串后面追加一个字符看是否能满足我们的要求,如果满足窗口扩张,如果不满足,则窗口向右滑动。
当K>0时,子串的条件变成了允许我们变换子串中的K个字符使其成为一个连续子串
那么这个题的关键点就是我们如何判断一个字符串改变K个字符,能够变成一个连续子串
- 如果当前字符串中的出现次数最多的字母个数+K大于串长度,那么这个串就是满足条件的
因此使用一个数组
int[]record = new int[26]来存储当前窗口中各个字母的出现次数,left和right表示左右边界- 窗口扩张:left不变,right++
- 窗口滑动:left++,right++
max保存滑动窗口内相同字母出现次数的历史最大值,通过判断窗口宽度
right - left + 1 > max + k来决定窗口是滑动还是扩张
AC代码
class Solution {
public int characterReplacement(String s, int k) {
if (s == null) {
return 0;
}
char[] s1 = s.toCharArray();
int len = s.length();
int[] record = new int[26];
int left = 0;
int right = 0;
int max = 0;
for (right = 0; right < len; right++) {
record[s1[right] - 'A']++;
max = Math.max(max, record[s1[right] - 'A']);
if ((right - left + 1) > max + k) {
record[s1[left] - 'A']--;
left++;
}
}
return len - left;
}
}
边栏推荐
猜你喜欢

聚焦数据来源、数据质量和模型性能构建小微企业信用画像

Practical sharing of distributed link tracking Jaeger + microservice Pig on Rainbond

5 cloud security management strategies enterprises should implement

Ceres库运行,模板内报内存冲突问题。(已解决)

Small program on how to play in the construction of e-government service platform value

程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房

redis未授权访问漏洞【vulhub靶场】复现

如何治理资源浪费?百度云原生成本优化最佳实践

为什么密码云服务平台是云时代的必然之选?

酷开科技 × StarRocks:统一 OLAP 分析引擎,全面打造数字化的 OTT 模式
随机推荐
Opencv学习之ORB特征提取和匹配
罗振宇的A股梦,咋这么难圆?
Launcher app prediction
Why is Luo Zhenyu's A-share dream so difficult to fulfill?
《独行月球》猛药,治不了开心麻花内耗
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
yolo系列的head模块
直击面试!阿里金九银十最新面试小册 稳过!
Chinese valentine's day of young people crazy to make money, earn 140000 a week
Focus!2022 interview must brush 461 interview questions summary + interview + resume template
ReentrantLock 原理
Practical sharing of distributed link tracking Jaeger + microservice Pig on Rainbond
鲜花“刺客”收割七夕
COMSOL空气反应 模型框架
“蔚来杯“2022牛客暑期多校训练营5 B、C、F、G、H、K
业务中我们如何更新缓存?Redis
Cool and efficient data visualization big screen, it's really not that difficult to do!丨Geek Planet
Do you understand the various configurations in the project?
ShanDong Multi-University Training #4 A、B、C、G
Cows 树状数组