题目描述:
解题思路:
利用双指针或者滑动窗口解决,只是在最基础的滑动窗口上面加了个k,在判断的时候,只需要历史最长的连续序列+k即可。
参考代码:
public int characterReplacement(String s, int k) {
int[] map=new int[26];
char[] c=s.toCharArray();
if(s.length()<=0)
{
return 0;
}
int right=0,left=0;
//历史最大的相同序列
int historymax=0;
for (right = 0; right < s.length(); right++) {
map[c[right]-'A']++;
historymax=Math.max(historymax,map[c[right]-'A']);
//如果窗口比最大序列的加上k还大,就将右滑动窗口
if(right-left+1>historymax+k)
{
//更新最左端的,将记录去掉
map[c[left]-'A']--;
//left右移
left++;
}
}
//最后的结果是就是窗口的大小,窗口大小就是序列的总长减去left到达的地方
return c.length-left;
}