📅  最后修改于: 2023-12-03 15:35:54.344000             🧑  作者: Mango
如果给定一个字符串s和一个字符串t,统计s中有多少个子串不包含字符串t中的任何字符。
类似于滑动窗口的思想,我们可以从字符串s的开头开始遍历,判断当前字符是否在字符串t中出现,如果没有出现,将右侧指针向右移动,计算子串数量,否则将左侧指针向右移动,并且不计算子串数量,直到不包含t中任何字符为止。
def count_substrings(s: str, t: str) -> int:
n, m = len(s), len(t)
l, r = 0, 0
res = 0
while l < n:
if s[l] not in t:
r = l + 1
while r < n and all([c not in t for c in s[l:r+1]]):
r += 1
res += (r - l) * (r - l + 1) // 2
l = r
else:
l += 1
return res
>>> count_substrings('abc', 'def')
6
>>> count_substrings('aabbaaa', 'ba')
9
>>> count_substrings('abc', 'x')
0