当前位置:实例文章 » 其他实例» [文章]Leecode316: 去除重复字母

Leecode316: 去除重复字母

发布人:shili8 发布时间:2025-01-19 03:37 阅读次数:0

**去除重复字母**

**题目描述**

给定一个字符串 `s`,请你找出其中的所有重复字母,并将它们从 `s` 中移除。返回最终结果。

**示例1**

输入:`"aabbbcc"` 输出:`"abc"`

**示例2**

输入:`"aabba"` 输出:`"ab"`

**示例3**

输入:`"aabbcc"` 输出:`"abc"`

**解决方案**

我们可以使用哈希表来存储每个字母的出现次数,然后遍历字符串,遇到重复字母时将其从哈希表中删除。

from collections import Counterdef removeDuplicateLetters(s):
 # 统计每个字母的出现次数 count = Counter(s)
 # 初始化结果和哈希表 result = []
 seen = set()
 for char in s:
 # 如果当前字母已经在结果中,则跳过 if char in seen:
 continue # 如果当前字母的出现次数小于1,则跳过 if count[char] < 1:
 break # 将当前字母添加到结果中,并更新哈希表 result.append(char)
 seen.add(char)
 # 更新当前字母的出现次数 count[char] -=1 return ''.join(result)

# 测试用例print(removeDuplicateLetters("aabbbcc")) # "abc"
print(removeDuplicateLetters("aabba")) # "ab"
print(removeDuplicateLetters("aabbcc")) # "abc"


**注释**

* `Counter` 是一个哈希表类,用于统计每个字母的出现次数。
* `seen` 是一个集合,用来存储已经添加到结果中的字母,以避免重复添加。
* `count[char] < 1` 的条件判断是为了确保当前字母的出现次数大于0,否则跳过该字母。

**时间复杂度**

* 统计每个字母的出现次数:O(n),其中 n 是字符串长度。
* 遍历字符串并添加字母到结果中:O(n)。
* 总时间复杂度:O(n)。

**空间复杂度**

* 使用哈希表存储每个字母的出现次数:O(1),因为平均情况下,每个字母只出现一次。
* 使用集合存储已经添加到结果中的字母:O(1),因为集合中不会超过 n 个元素。
* 总空间复杂度:O(n)。

相关标签:
其他信息

其他资源

Top