📅  最后修改于: 2023-12-03 14:50:07.202000             🧑  作者: Mango
给定一个字符串 S,计算具有所有不同字符的子字符串的数量。
输入:S = "abcabc"
输出:10
解释:具有所有不同字符的子字符串为 "a", "b", "c", "ab", "ac", "bc", "abc", "bca", "cab" 和 "cba"。共有 10 个。
这是一个典型的滑动窗口问题。我们维护一个滑动窗口,通过移动右边界来扩展窗口,并移动左边界来缩小窗口。当子字符串包含了所有不同的字符时,我们增加计数器并缩小左边界。
def countSubstring(s: str) -> int:
ans, left, right = 0, 0, 0
dictChar = {}
while right < len(s):
dictChar[s[right]] = dictChar.get(s[right], 0) + 1
while left <= right and len(dictChar) != right - left + 1:
dictChar[s[left]] -= 1
if dictChar[s[left]] == 0:
dictChar.pop(s[left])
left += 1
ans += right - left + 1
right += 1
return ans