📌  相关文章
📜  具有非重复字符的所有唯一子字符串的计数(1)

📅  最后修改于: 2023-12-03 14:50:08.222000             🧑  作者: Mango

具有非重复字符的所有唯一子字符串的计数

当我们需要对一个字符串进行处理时,我们通常需要考虑到这个字符串的所有子字符串。在许多问题中需要找到具有非重复字符的所有唯一子字符串。这种问题对于理解字符串的操作和性质非常有用。

问题描述

给定一个字符串 s,找到所有具有非重复字符的唯一子字符串的数量。

解题思路

我们可以使用两个指针(leftright 来遍历字符串,并使用哈希表来存储已经出现过的字符。我们在扫描字符串时,将每个扫描到的字符添加到哈希表中。如果该字符已经在哈希表中存在,则需要将 left 指针向右移动,直到没有重复字符为止。利用此方法,我们可以找到所有具有非重复字符的唯一子字符串,最后计算所有子字符串的数量即可。

代码实现
def count_unique_substrings(s):
    if not s:
        return 0

    left = 0
    right = 0
    n = len(s)
    unique_substrings = set()
    char_set = set()

    while right < n:
        if s[right] not in char_set:
            char_set.add(s[right])
            right += 1
        else:
            unique_substrings.add(s[left:right])
            char_set.remove(s[left])
            left += 1

    unique_substrings.add(s[left:right])

    return len(unique_substrings)

该函数的时间复杂度为 $O(n)$,其中 $n$ 是字符串的长度。空间复杂度为 $O(k)$,其中 $k$ 表示字符集的大小。因为我们在哈希表中存储了字符集中的所有字符。