删除出现次数最少的字符(HJ7)
删除出现次数最少的字符
题目描述
https://www.nowcoder.com/share/jump/5832603751775720118042
给定一个字符串,删除其中出现次数最少的字符。如果有多个字符出现次数都是最少,则全部删除。输出删除后的字符串,保持原有顺序。
示例
输入:
aabcdddaadddd输入:
aabbcaabb解题思路
哈希表统计 + 过滤
- 使用
Counter统计每个字符的出现次数 - 找出最小出现次数
- 遍历原字符串,只保留出现次数不是最少的字符
代码实现
s = input().strip()
from collections import Counter
cnt = Counter(s)
min_cnt = min(cnt.values())
for ch in s:
if cnt[ch] != min_cnt:
print(ch, end='')代码解析
Counter(s) -
字符频率统计
Counter("aabcddd")
# → Counter({'d': 3, 'a': 2, 'b': 1, 'c': 1})Counter 是 collections
模块提供的字典子类,专门用于计数。
min(cnt.values()) -
获取最小频率
cnt.values() # dict_values([3, 2, 1, 1])
min(cnt.values()) # 1遍历原字符串保持顺序
for ch in s: # 遍历原字符串,保持原有顺序
if cnt[ch] != min_cnt: # 只保留非最小频率的字符
print(ch, end='')关键:必须遍历原字符串 s,而不是
cnt.keys(),否则会丢失字符顺序信息。
时间复杂度
- O(n) - Counter 统计 O(n),找最小值 O(k),过滤 O(n),k 为字符种类数
空间复杂度
- O(k) - 存储字符频率,k ≤ 128(ASCII 字符集)
删除出现次数最少的字符(HJ7)
https://mingsm17518.github.io/2026/04/09/algorithm/华为机考/nowcoder/String/07_remove_least_freq_chars/