LC2024. 考試的最大困擾度
阿新 • • 發佈:2021-10-04
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')); } };