Given a string, find the length of the longest substring T that contains at mostk distinct characters.
For example,Given s = “eceba”
and k = 2,
T is "ece" which its length is 3.
思路:跟 Longest Substring with at Most 2 Characters.思路一模一样。i是主指针,j是辅指针,然后模板套起来,注意要判断如果即将要大于k的时候,j停下来,不做任何事情,update res,然后i++;
class Solution {
public int lengthOfLongestSubstringKDistinct(String s, int k) {
if(s == null || s.length() == 0) {
return 0;
}
int curcount = 0;
int count = 0;
int j = 0;
int res = 0;
int[] scount = new int[256];
for(int i = 0; i < s.length(); i++) {
// move j;
while(j < s.length() && curcount <= k) {
if(curcount == k) {
if(scount[s.charAt(j)] == 0) {
break;
}
}
if(scount[s.charAt(j)] == 0) {
curcount++;
}
scount[s.charAt(j)]++;
j++;
}
// update res;
res = Math.max(res, j - i);
// move i;
scount[s.charAt(i)]--;
if(scount[s.charAt(i)] == 0) {
curcount--;
}
}
return res;
}
}