340. 至多包含 K 个不同字符的最长子串
Difficulty
Medium
Tags
滑动窗口
Star
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例 1:
输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。
示例 2:
输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。
提示:
1 <= s.length <= 5 * 104
0 <= k <= 50
滑动窗口
思路
说人话:窗口内不同数字个数不超过 k 的最长 子串长度
题解
class Solution: def lengthOfLongestSubstringKDistinct(self, s: str, k: int) -> int: wds = collections.defaultdict(int) l, r = 0, 0 res = 0 while r < len(s): wds[s[r]] += 1 r += 1 while len(wds) > k: wds[s[l]] -= 1 if wds[s[l]] == 0: del wds[s[l]] l += 1 res = max(res, r-l) return res