Given a string s , find the length of the longest substring t that contains at most 2 distinct characters.
Example 1:
Input: "eceba"
Output: 3
Explanation: t is "ece" which its length is 3.
Example 2:
Input: "ccaabbb"
Output: 5
Explanation: t is "aabbb" which its length is 5.
用start标记起始点,然后iterate,过程中一旦出现第三个不同的字符就移动start. 直到结束。
public int lengthOfLongestSubstringTwoDistinct(String s) {
int n = s.length();
if (n == 0 || n == 1) return n;
HashMap<Character, Integer> map = new HashMap<>();
int start = 0;
int res = -1;
char[] c = s.toCharArray();
for (int i = 0; i < n; i++) {
char cur = c[i];
if (map.containsKey(cur)) {
map.put(cur, map.get(cur) + 1);
} else {
map.put(cur, 1);
if (map.size() > 2) {
res = Math.max(res, i-start);
//move start
while(true) {
char cc = c[start];
if (map.get(cc) == 1) {
map.remove(cc);
start++;
break;
} else {
map.put(cc, map.get(cc) - 1);
start++;
}
}
}
}
}
res = Math.max(res, n - start);
if (res == -1) return s.length();
return res;
}