Given a string, find the length of the longest substring T that contains at most k distinct characters.
Example 1:
Input: s = "eceba", k = 2
Output: 3
Explanation: T is "ece" which its length is 3.
Example 2:
Input: s = "aa", k = 1
Output: 2
Explanation: T is "aa" which its length is 2.
不解释啦,上代码,唯一记住的,substring问题,就是考虑以每一个位置为结尾的结果是什么,然后更新要求的量就可以啦。
public int lengthOfLongestSubstringKDistinct(String s, int k) {
if (s.length() == 0 || k == 0) return 0;
if (k >= s.length()) return s.length();
HashMap<Character, Integer> map = new HashMap<>();
int res = 0;
int start = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
if (map.size() > k) {
res = Math.max(res, i - start);
//move start
while (start < i) {
char cur = s.charAt(start);
if (map.get(cur) == 1) {
map.remove(cur);
start++;
break;
} else {
map.put(cur, map.get(cur) - 1);
start++;
}
}
}
}
res = Math.max(res, s.length() - start);
return res;
}