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.
Two pointers. i points to the head of possible string and j points to the tail of it.
Use a hashmap to count the number of appearance of current characters appears in the possible substr.
move i or j depends on the size of map.
if map.size() > 2, move i,
else move j
class Solution { public: int lengthOfLongestSubstringTwoDistinct(string s) { unordered_map<char, int> map; int i = 0; // head of the possible substr int j = 0; // tail of the possible substr int ans = 0; while(j < s.size()){ if(map.find(s[j]) != map.end()){ //s[j] already exists in substr map[s[j]] += 1; j++; } else{ //s[j] not exists in substr before while(map.size() > 1){ map[s[i]] -= 1; if(map[s[i]] == 0){ map.erase(s[i]); } i++; } //map.size() == 1 map[s[j]] = 1; j++; } ans = max(ans, j - i); } return ans; } };