2024. 考试的最大困扰度
maxConsecutiveAnswers
一、解题思路
1、解法一( Java )
解法思路:滑动窗口
当窗口满足条件时,拓展右边界 right++
当窗口不满足条件时,维护左边界 left++
以测试用例 "TTFTTFTT"
k =1
为例解释:
当循环到 tCnt = 4
并且 fCnt = 2
时,此时 fCnt
大于 k = 1
,则此时对左指针进行维护,让左指针向右移动到第一个 F
后,即维护到 fCnt = 1
,然后右指针再向右移动。(以此类推)
伪代码如下:
/**
* @author Listen 1024
* @description
* @date 2022-03-29 8:59
*/
class Solution{
public int maxConsecutiveAnswers(String answerKey, int k) {
//sliding window
int tCnt = 0, fCnt = 0, ans = 0;
//left pointer & right pointer
int left = 0;
for (int right = 0; right < answerKey.length(); right++) {
//move right
//当不满足条件时,拓展右边界
if (answerKey.charAt(right) == 'T') {
tCnt++;
} else {
fCnt++;
}
//move left
//当满足条件时,缩短左边界
while (Math.min(tCnt, fCnt) > k) {
if (answerKey.charAt(left) == 'T') {
tCnt--;
} else {
fCnt--;
}
left++;
}
//update ans
ans = Math.max(ans, right - left + 1);
}
return ans;
}
}
运行结果截图如下: