题目链接:https://leetcode.com/problems/longest-substring-with-at-most-two-distinct-characters/
Given a string, find the length of the longest substring T that contains at most 2 distinct characters.
For example, Given s = “eceba”
,
T is "ece" which its length is 3.
思路:维护一个窗口和一个hash表,使得在这个窗口内hash表中只有两个不同元素。扫描一遍字符串,如果添加进当前字符使得hash表的长度大于2了,那么窗口左边界就要右移,并且在hash表中删除一个这个元素,如果这个元素的计数为0了,那么就在hash表中删除掉这个元素,直到窗口小于等于2.
代码如下:
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
unordered_map<char, int> hash;
int ans = 0, left = 0;
for(int i = 0; i < s.size(); i++)
{
hash[s[i]]++;
while(hash.size() > 2)
{
hash[s[left]]--;
if(hash[s[left]]==0) hash.erase(s[left]);
left++;
}
ans = max(ans, (i-left+1));
}
return ans;
}
};