至多包含 K 个不同字符的最长子串
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例 1:
输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。
示例 2:
输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。
public int find(String s, int k) {
int left = 0;
int maxLen = 0;
Map<Character, Integer> map = new HashMap<>();
for (int right = 0; right < s.length(); right++) {
char ch = s.charAt(right);
map.put(ch, map.getOrDefault(ch, 0) + 1);
while (map.size() > k) {
char leftCh = s.charAt(left);
map.put(leftCh, map.get(leftCh) - 1);
if (map.get(leftCh) == 0) {
map.remove(leftCh);
}
left++;
}
maxLen = Math.max(maxLen, right - left + 1);
}
return maxLen;
}
浙公网安备 33010602011771号