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.
和minimum window一样的题。一遍过。 public int lengthOfLongestSubstringTwoDistinct(String s) {
int max = 0;
if (s.isEmpty()) {
return max;
}
Map<Character, Integer> map = new HashMap<Character, Integer>();
int start = 0;
int cur = 0;
while (cur < s.length()) {
char c = s.charAt(cur);
if (map.containsKey(c)) {
map.put(c, map.get(c)+1);
max = Math.max(max, cur-start+1);
} else {
while (map.size() > 1) {
if (map.get(s.charAt(start)).equals(1)) {
map.remove(s.charAt(start));
} else {
map.put(s.charAt(start), map.get(s.charAt(start))-1);
}
start++;
}
map.put(c, 1);
max = Math.max(max, cur-start+1);
}
cur++;
}
return max;
}