Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s = “eceba” and k = 2,
T is "ece" which its length is 3.
用伪哈希表和start来标志开头,每次遇到新的哈希表里没有的,就更新start,否则存进哈希表,最后maintain一个最大substring。
public int lengthOfLongestSubstringKDistinct(String s, int k) {
if (s.length() == 0) return 0;
if (k == 0) return 0;
int result = 1, start = 0, tag = 0, count = 0;
int[] map = new int[256];
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (map[c] > 0) {
map[c]++;
} else {
//move start
if (count >= k) {
while (tag == 0) {
int num = map[s.charAt(start)];
if (num == 1) {
count--;
tag = 1;
}
map[s.charAt(start)]--;
start++;
}
tag = 0;
}
map[c]++;
count++;
}
result = Math.max(result, i - start + 1);
}
return result;
}