📌  相关文章
📜  长度为K的子字符串包含相同字符(1)

📅  最后修改于: 2023-12-03 15:28:36.091000             🧑  作者: Mango

长度为K的子字符串包含相同字符

假设有一个字符串s,长度为n,现在需要找到长度为k的子字符串中是否存在相同的字符。

解法

我们可以遍历字符串s,固定一个长度为k的窗口,检查该窗口内是否存在相同的字符。

具体步骤如下:

  1. 初始化一个字典d,用于记录当前窗口内各个字符出现的次数。
  2. 对于每个长度为k的窗口,遍历窗口内的字符,将字符及其出现次数加入字典d中。
  3. 遍历字典d,如果存在字符出现次数大于1的,则说明该窗口内存在相同的字符,返回True。
  4. 如果遍历完所有窗口都没有找到相同的字符,返回False。

代码如下:

def exist_duplicate_char(s: str, k: int) -> bool:
    for i in range(len(s) - k + 1):
        d = {}
        for j in range(i, i + k):
            if s[j] in d:
                d[s[j]] += 1
            else:
                d[s[j]] = 1
        for key, value in d.items():
            if value > 1:
                return True
    return False
测试

我们可以使用一些测试样例来验证函数的正确性。

assert exist_duplicate_char("abcabc", 2) == True
assert exist_duplicate_char("abcabc", 3) == True
assert exist_duplicate_char("abcdefg", 3) == False
总结

以上就是判断字符串中长度为k的子字符串是否存在相同字符的方法,时间复杂度为$O(nk)$,空间复杂度为$O(k)$。