leetcode_1100 长度为 K 的无重复字符子串

324 阅读1分钟

要求

给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目。

示例 1:

输入:S = "havefunonleetcode", K = 5
输出:6
解释:
这里有 6 个满足题意的子串,分别是:'havef','avefu','vefun','efuno','etcod','tcode'

示例 2:

输入:S = "home", K = 5
输出:0
解释:
注意:K 可能会大于 S 的长度。在这种情况下,就无法找到任何长度为 K 的子串。

提示:

  • 1 <= S.length <= 10^4
  • S 中的所有字符均为小写英文字母
  • 1 <= K <= 10^4

核心代码

class Solution:
    def numKLenSubstrNoRepeats(self, s: str, k: int) -> int:
        if len(s) < k:
            return 0
        res = 0
        for i in range(len(s) - k + 1):
            tmp = s[i:i + k]
            if self.check(tmp):
                res += 1
        return res

    def check(self,string):
        from collections import Counter
        record = Counter(string)
        for key,val in record.items():
            if val > 1:
                return False
        return True

image.png

解题思路:循环遍历即可,我们在自定义一个方法来检查是不是有重复值,我们在循环遍历的过程中取得k个字符串,经过方法的检测,看是否满足无重复值,无计数加一,否则跳过。