424. 替换后的最长重复字符
题目描述
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度
注意:
字符串长度 和 k 不会超过 104。
题目解析
最多替换k次,即替换k次,这些被替换的字符串也是逻辑连续的。即求窗口中的字符符合其中最大的字母的个数N
和滑动窗口大小M
,有M-N<=K
,这就得出窗口收缩的条件M-N>K
。
题目特征
- 划分为两类事物,滑动窗口内个数最多的数字和其他
- 需要求出滑动窗口的收缩条件
- 保证滑动窗口里面东西是连续的
题目解答
class Solution {
public int characterReplacement(String s, int k) {
//
char[] chs = s.toCharArray();
int len = s.length();
int[] dict = new int[26];
int maxc = 0,l=0,res=0;
for(int r =0 ; r < len ; r++){
dict[chs[r]-'A']++;
maxc = Math.max(maxc,dict[chs[r]-'A']);
while(r-l+1-maxc >k){
dict[chs[l++]-'A']--;
}
res = Math.max(r-l+1,res);
}
return res;
}
}
题目总结
将问题分割为两部分。