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

LC2024. 考試的最大困擾度

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' 。
解析:
求最長連續答案,即可以分別算出每一種答案的長度,在取最長。對於每一種情況,可以使用滑動視窗,去維護視窗內保證需要轉換的個數小於k,遍歷結束獲得維護的最長值。

class Solution {
public:
    char cheak(char a) {
        if (a == 'T') {
            return 'F';
        }
        return 'T';
    }
    int max_len(string answerKey, int k, char a) {
        int step = 0;
        map<char, int> maps;
        int l = 0, r = 0;
        while (r < answerKey.size()) {
            maps[answerKey[r]]++;
            while (l <= r && maps[cheak(a)] > k) {
                maps[answerKey[l]]--;
                l++;
            }
            step = max(step, r - l + 1);
            r++;
        }
        return step;
    }

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