考试的最大困扰度
难度:中等
根据题意,可以转化为求一个包含 ‘F’ 或者 ‘T’ 的个数不超过 k 的最大长度窗口。
通过方法 getCnt() 求出包含字符 c 数量不超过 k 的最大窗口长度,那么Math.max(getCnt(‘F’),getCnt(‘T’))就是最后求得的结果。
在方法getCnt()中,利用滑动窗口的思路,i表示左端点,j表示右端点,每次移动右端点j,若chars[j]==c,cnt自增,当cnt大于k时,需要移动左端点i直至cnt小于k。
代码如下:
class Solution {
char[] chars;
int _k;
int n;
public int maxConsecutiveAnswers(String answerKey, int k) {
chars = answerKey.toCharArray();
_k = k;
n = chars.length;
return Math.max(getCnt('F'),getCnt('T'));
}
int getCnt(char c){
int res = 0;
for (int i = 0,j = 0,cnt = 0; j < n; j++) {
if (chars[j]==c){
cnt++;
}
while(cnt>_k){
if (chars[i]==c){
cnt--;
}
i++;
}
res = Math.max(res,j-i+1);
}
return res;
}
}
执行结果:成功