424. 替换后的最长重复字符
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:字符串长度 和 k 不会超过 104。
示例 1:
输入:s = "ABAB", k = 2
输出:4
解释:用两个'A'替换为两个'B',反之亦然。
示例 2:
输入:s = "AABABBA", k = 1
输出:4
解释:
将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
子串 "BBBB" 有最长重复字母, 答案为 4。
class Solution {
public int characterReplacement(String s, int k) {
int[] counts = new int[26];
int len = s.length();
int left = 0 , right = 0;
int nMax = 0;
while(right<len){
counts[s.charAt(right)-'A']++;//计数
nMax = Math.max(nMax,counts[s.charAt(right)-'A']);//当前left和right区域最长串的长度
if(right-left+1>nMax+k){//若right-left>nMax+k,说明替换 k 次连不成串,故left++,此使区间内 counts[left]数量减1
counts[s.charAt(left)-'A']--;
left++;
}
right++;
}
return right-left;
}
}
本文介绍了一个算法问题,即如何通过替换字符来获得包含重复字母的最长子串。使用滑动窗口的方法,在限定次数内替换字符,寻找最长重复子串。
627

被折叠的 条评论
为什么被折叠?



