📅  最后修改于: 2023-12-03 14:56:53.702000             🧑  作者: Mango
给定一个字符串,找出仅出现一次的最小子字符串。
例如:
输入:abbcbc
输出:abc
本题可以使用两个指针来解决。令 left
和 right
分别指向字符串的开头和结尾,用字典 dict
存储每个字符的出现次数。遍历字符串,如果右指针所指的字符在字典中不存在,则将其加入字典中。如果存在,则将其对应的出现次数加一。当出现某个字符的出现次数大于一次时,将左指针向右移动并更新字典中的出现次数,直到出现次数恢复为一次。
代码实现如下:
def find_substring(s: str) -> str:
left, right = 0, 0
dict = {}
sub_str = ''
while right < len(s):
if s[right] not in dict:
dict[s[right]] = 1
else:
dict[s[right]] += 1
right += 1
while dict[s[right-1]] > 1:
dict[s[left]] -= 1
left += 1
if len(sub_str) == 0 or len(sub_str) > right-left:
sub_str = s[left:right]
return sub_str
时间复杂度为 $O(n)$,空间复杂度为 $O(n)$,其中 $n$ 为字符串的长度。