删除出现次数最少的字符(HJ7)

删除出现次数最少的字符

题目描述

https://www.nowcoder.com/share/jump/5832603751775720118042

给定一个字符串,删除其中出现次数最少的字符。如果有多个字符出现次数都是最少,则全部删除。输出删除后的字符串,保持原有顺序。

示例

输入:

aabcddd
输出:
aadddd
解释:b 和 c 各出现 1 次(最少),删除后剩余 “aadddd”

输入:

aabbc
输出:
aabb
解释:c 出现 1 次(最少),删除后剩余 “aabb”

解题思路

哈希表统计 + 过滤

  1. 使用 Counter 统计每个字符的出现次数
  2. 找出最小出现次数
  3. 遍历原字符串,只保留出现次数不是最少的字符

代码实现

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

Countercollections 模块提供的字典子类,专门用于计数。

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/
作者
Ming
发布于
2026年4月9日
更新于
2026年4月9日
许可协议