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.
Same solution as K distinct characters
Can use two variables to track the last index of the characters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Solution { public int lengthOfLongestSubstringTwoDistinct(String s) { if (s == null || s.length() == 0) { return 0; } int max = 0, left = 0; HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { char cur = s.charAt(i); map.put(cur, map.getOrDefault(cur, 0) + 1); while (map.size() > 2) { char leftChar = s.charAt(left); if (map.containsKey(leftChar)) { map.put(leftChar, map.get(leftChar) - 1); if (map.get(leftChar) == 0) { map.remove(leftChar); } } left++; } max = Math.max(max, i - left + 1); } return max; } }
|