340. 至多包含 K 个不同字符的最长子串

340. 至多包含 K 个不同字符的最长子串_第1张图片

int lengthOfLongestSubstringKDistinct(string s, int k) {
    unordered_map window;
    int l = 0, r = 0;
    bool flag1 = false;
    int maxNum = 0;
    while (r < s.size()) {
        if (!flag1)
            window[s[r++]]++;

        bool flag2 = false;
        int count = 0;
        for (auto it:window) {
            if (window[it.first] > 0)
                count++;
            if (count > k) {
                flag2 = true;
                break;
            }
        }

        if (flag2) {
            //不满足条件
            //减小窗口
            window[s[l++]]--;
            flag1 = true;
        } else {
            flag1 = false;
            maxNum = max(maxNum, r - l);
        }

    }
    return maxNum;
}

你可能感兴趣的:(340. 至多包含 K 个不同字符的最长子串)