目录

0340:至多包含 K 个不同字符的最长子串(★)

力扣第 340 题

题目

给你一个字符串 s 和一个整数 k ,请你找出 至多 包含 k不同 字符的最长子串,并返回该子串的长度。

示例 1:

输入:s = "eceba", k = 2
输出:3
解释:满足题目要求的子串是 "ece" ,长度为 3 。

示例 2:

输入:s = "aa", k = 1
输出:2
解释:满足题目要求的子串是 "aa" ,长度为 2 。

提示:

  • 1 <= s.length <= 5 * 104
  • 0 <= k <= 50

分析

典型的滑动窗口。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def lengthOfLongestSubstringKDistinct(self, s: str, k: int) -> int:
    res, i, d = 0, 0, defaultdict(int)
    for j, c in enumerate(s):
        d[c] += 1
        while len(d)>k:
            d[s[i]] -= 1
            if not d[s[i]]:
                del d[s[i]]
            i += 1
        res = max(res, j-i+1)
    return res

88 ms