LeetCode 2024 考试的最大困扰度
🟡 中等 https://leetcode.cn/problems/maximize-the-confusion-of-an-exam/description/
思路
窗口内是换完的答案;窗口的长度没有限制,窗口内的元素有限制。
如果要换成 T 那么窗口内的 F个数就要小于k;如果换成 F 那么窗口内的 T 个数就要小于 k;显然可以遍历两次,一次是T 一次是F,是否可以一次过呢?可以,用或:窗口内的T或F小于k,兼备两种情况。
这里的while 外是小于的情况,while内是大于的情况,外面是或,里面是两个否定要用 && 。
class Solution {
public:
int maxConsecutiveAnswers(string answerKey, int k) {
int T_count = 0;
int F_count = 0;
int left = 0;
int res = 0;
for(int i=0;i<answerKey.size();i++){
if(answerKey[i]=='T') T_count++;
if(answerKey[i]=='F') F_count++;
while(T_count>k&&F_count>k){
if(answerKey[left]=='T'){
T_count--;
}else{
F_count--;
}
left++;
}
res = max(res,i-left+1);
}
return res;
}
};