至多包含两个不同字符的最长子串

给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t 。

示例 1:

输入: "eceba"
输出: 3
解释: t 是 "ece",长度为3。
示例 2:

输入: "ccaabbb"
输出: 5
解释: t 是 "aabbb",长度为5。

(快慢指针法)

class Solution {
public:
    int lengthOfLongestSubstringTwoDistinct(string s) {
        unordered_map indices;
        int res = 0;
        int k = 0;
        int l = 0;
        for (int i = 0; i < s.size(); ++i) {
            k += indices.count(s[i]) == 0 || indices[s[i]] < l;
            if (k > 2) {
                while (indices[s[l]] > l) ++l;
                ++l;
                --k;
            }
            indices[s[i]] = i;
            res = max(res, i - l + 1);
        }
        return res;
    }
};

 

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