public static int maxConsecutiveAnswers(String answerKey, int k) {
int n=answerKey.length();
int[] num=new int[2];//第一个为T的数量,第二个为F的数量
int l=0;//左右指针
int r=0;
int max=0;
while (r<n){
//计数
if(answerKey.charAt(r)=='T')
num[0]++;
if(answerKey.charAt(r)=='F')
num[1]++;
//当两个字符数量都大于k时,其中一个为k+1,此时计算长度
if(num[0]>k&&num[1]>k){
//在[l,r-1]中只有一种字符为k个,范围内所有字符都可变为同一种
max=Math.max(max,r-l);
//移动左指针,直到其中一种字符变为k个
while (l<r){
if(num[0]==k||num[1]==k)
break;
if(answerKey.charAt(l)=='T')
num[0]--;
if(answerKey.charAt(l)=='F')
num[1]--;
l++;
}
}else if(r==n-1)
//当走到最后一位时,如果仍不满足上面情况,说明[l,r]内必有一种字符<=k,可变为同一种
max=Math.max(max,r-l+1);
r++;
}
return max;
}
滑动窗口算法leetcode.2024
最新推荐文章于 2024-07-22 16:27:42 发布