LeetCode 2024 考试的最大困扰度

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;

    }

};