替换后的最长重复字符
作者:互联网
替换后的最长重复字符
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,
总共可最多替换 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 len = s.length();
if(len < 2) return len;
char[] cc = s.toCharArray();
int left=0,right=0;
int res=0;
int maxCount = 0;
int[] freq = new int[26]; //记录单词出现的频数
while(right < len){
freq[cc[right] - 'A']++; //当前单词频数+1
// 维护maxCount,每次右边界移动的时候,此次相同字符的频数就会+1
maxCount = Math.max(maxCount,freq[cc[right] - 'A']);
right++; //右边界持续前进
if(right - left > maxCount + k){ //此时的k根本不够用
// 频数数组做减法
freq[cc[left] - 'A']--;
// 其他不是最多出现的字符替换以后,不能填满这个滑动窗口,左边界右移
left++;
}
res = Math.max(res,right - left);
}
return res;
}
}
标签:字符,right,int,res,最长,maxCount,替换,left 来源: https://www.cnblogs.com/xiaofff/p/14398523.html