159. 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.
Similar: 3. Longest Substring Without Repeating Characters (Almost same !)
340. Longest Substring with At Most K Distinct Characters
239. Sliding Window Maximum
1 public class Solution { 2 public int lengthOfLongestSubstringTwoDistinct(String s) { 3 int[] array = new int[2]; 4 array[0] = -1; 5 array[1] = -1; 6 int max = 0; 7 int start = 0; 8 9 for (int i = 0; i < s.length(); i++) { 10 max = max > (i-start) ? max : (i-start); // i is not included 11 char c = s.charAt(i); 12 if (array[0] == -1) { 13 array[0] = c; 14 } else if (array[0] != c && array[1] == -1) { // in case array[1] = array[0] 15 array[1] = c; 16 } else if (array[0] != c && array[1] != c) { 17 char pre = s.charAt(i-1); 18 int j = i-2; 19 while (j >= start && s.charAt(j) == pre) { 20 j--; 21 } 22 j++; 23 start = j; 24 array[0] = pre; 25 array[1] = c; 26 } 27 } 28 29 max = max > (s.length() - start) ? max : (s.length() - start); 30 return max; 31 } 32 }