📌  相关文章
📜  恰好包含给定字符k 次的子字符串的数量(1)

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

恰好包含给定字符k次的子字符串的数量

给定一个字符串和一个字符k,求该字符串中恰好包含k次给定字符的子字符串的数量。

方法一: 暴力枚举

暴力枚举所有子字符串,统计其中包含k个给定字符的数量。

时间复杂度:O(n^3)

代码如下:

def count_k_substring(s: str, k: str) -> int:
    count = 0
    n = len(s)
    for i in range(n):
        for j in range(i+1, n+1):
            if s[i:j].count(k) == k:
                count += 1
    return count
方法二: 滑动窗口

用一个窗口滑动遍历字符串,通过维护窗口内包含k个给定字符的数量,来计算恰好包含k次给定字符的子字符串的数量。

时间复杂度:O(n)

代码如下:

def count_k_substring(s: str, k: str) -> int:
    count = 0
    n = len(s)
    left = right = 0
    k_count = 0
    while right < n:
        if s[right] == k:
            k_count += 1
        while k_count > k:
            if s[left] == k:
                k_count -= 1
            left += 1
        if k_count == k:
            count += 1
        right += 1
    return count

以上两种方法均可解决问题,但是时间复杂度存在较大差距。因此,我们可以使用滑动窗口的方法来获得更优的时间效率。