📌  相关文章
📜  给定字符串仅出现一次的最小子字符串(1)

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

给定字符串仅出现一次的最小子字符串

问题描述

给定一个字符串,找出仅出现一次的最小子字符串。

例如:

输入:abbcbc 输出:abc

解决方案

本题可以使用两个指针来解决。令 leftright 分别指向字符串的开头和结尾,用字典 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$ 为字符串的长度。