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.
思路:同向双指针,跟Longest Substring with At Most K Distinct Characters 一模一样,i是主指针,j是辅指针,然后模板套起来,注意要判断如果即将要大于k的时候,j停下来,不做任何事情,update res,然后i++;代码跟K一模一样,只是把k改成2即可;
class Solution {
public int lengthOfLongestSubstringTwoDistinct(String s) {
if(s == null || s.length() == 0) {
return 0;
}
char[] ss = s.toCharArray();
int[] scount = new int[256];
int C = 0;
int j = 0;
int maxlen = 0;
for(int i = 0; i < ss.length; i++) {
// move j;
while(j < ss.length && C <= 2) {
if(scount[ss[j]] == 0) {
if(C == 2) {
break;
}
C++;
}
scount[ss[j]]++;
j++;
}
// update result;
// 最多是k,小于k也必须update maxlen;
if(j - i > maxlen) {
maxlen = j - i;
}
// remove i;
scount[ss[i]]--;
if(scount[ss[i]] == 0) {
C--;
}
}
return maxlen;
}
}