1. 程式人生 > 其它 >2024 考試最大困擾度

2024 考試最大困擾度

一位老師正在出一場由 n 道判斷題構成的考試,每道題的答案為 true (用 'T' 表示)或者 false (用 'F' 表示)。老師想增加學生對自己做出答案的不確定性,方法是 最大化 有 連續相同 結果的題數。(也就是連續出現 true 或者連續出現 false)。

給你一個字串 answerKey ,其中 answerKey[i] 是第 i 個問題的正確結果。除此以外,還給你一個整數 k ,表示你能進行以下操作的最多次數:

每次操作中,將問題的正確答案改為 'T' 或者 'F' (也就是將 answerKey[i] 改為 'T' 或者 'F' )。
請你返回在不超過 k 次操作的情況下,最大 連續 'T' 或者 'F' 的數目。

示例 1:

輸入:answerKey = "TTFF", k = 2
輸出:4
解釋:我們可以將兩個 'F' 都變為 'T' ,得到 answerKey = "TTTT" 。
總共有四個連續的 'T' 。
示例 2:

輸入:answerKey = "TFFT", k = 1
輸出:3
解釋:我們可以將最前面的 'T' 換成 'F' ,得到 answerKey = "FFFT" 。
或者,我們可以將第二個 'T' 換成 'F' ,得到 answerKey = "TFFF" 。
兩種情況下,都有三個連續的 'F' 。
示例 3:

輸入:answerKey = "TTFTTFTT", k = 1
輸出:5
解釋:我們可以將第一個 'F' 換成 'T' ,得到 answerKey = "TTTTTFTT" 。
或者我們可以將第二個 'F' 換成 'T' ,得到 answerKey = "TTFTTTTT" 。
兩種情況下,都有五個連續的 'T' 。

提示:

n == answerKey.length
1 <= n <= 5 * 104
answerKey[i] 要麼是 'T' ,要麼是 'F'
1 <= k <= n

思路:

​ 雙指標問題,注意思路,對照官方題解進行了調整

class Solution {
public:
    int maxConsecutiveChar(string& answerKey, int k, char ch) {
        //滑動視窗
        int n = answerKey.length();
        int ans = 0;
        for (int left = 0, right = 0, sum = 0; right < n; right++) {//sum表示使用k的數量
            if(answerKey[right]!=ch)sum++;
            while (sum > k) {//當修改次數已經用完時
                if(answerKey[left]!=ch)//如果左指標不等於目標值
                {
                    left++;
                    sum--;//增加一次修改機會
                }else{
                    //如果左指標等於目標值
                    left++;
                }
            }
            ans = max(ans, right - left + 1);
        }
        return ans;
    }

    int maxConsecutiveAnswers(string answerKey, int k) {
        return max(maxConsecutiveChar(answerKey, k, 'T'),
                   maxConsecutiveChar(answerKey, k, 'F'));
    }
};