Skip to content

【滑动窗口】可修改k次的最长同字符子串

考试的最大困扰度

给你一个字符串 answerKey ,其中 answerKey[i] 是第 i 个问题的正确结果。除此以外,还给你一个整数 k ,表示你能进行以下操作的最多次数:

每次操作中,将问题的正确答案改为 'T' 或者 'F' (也就是将 answerKey[i] 改为 'T' 或者 'F' )。 请你返回在不超过 k 次操作的情况下,最大 连续 'T' 或者 'F' 的数目。

贪心,只需要控制滑动窗口内的相异字符数量不超过k即可。

class Solution {
public:
    int maxConsecutiveAnswers(string answerKey, int k) {
        auto solve = [&] (char c) {
            int l = 0, r = 0, cnt = 0, ans = 0;
            queue<int> pos;
            while (r < answerKey.size()) {
                if (answerKey[r] != c) {
                    pos.push(r);
                    cnt++;
                    if (cnt > k) {
                        l = pos.front() + 1;
                        pos.pop();
                        cnt--;
                    }
                }
                ans = max(ans, r - l + 1);
                r++;
            }
            return ans;
        };
        return max(solve('F'), solve('T'));
    }
};