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