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)。