√
给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t 。
示例 1:
输入: "eceba"
输出: 3
解释: t 是 "ece",长度为3。
示例 2:
输入: "ccaabbb"
输出: 5
解释: t 是 "aabbb",长度为5。=
(快慢指针法)
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
unordered_map<char, int> 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;
}
};