第一个只出现一次的字符(HJ13)
第一个只出现一次的字符
题目描述
https://www.nowcoder.com/share/jump/5832603751775720154472
给定一个字符串,找出其中第一个只出现一次的字符。如果没有这样的字符,输出 -1。
示例
输入:
asdfasdfoo输入:
aabbcc-1解题思路
哈希表统计 + 顺序查找
- 使用
Counter统计每个字符的出现次数 - 按原字符串顺序遍历,找到第一个计数为 1 的字符
- 若遍历完未找到,返回 -1
关键点:必须遍历原字符串而非字典,保证找到的是”第一个”符合条件的字符。
代码实现
from collections import Counter
s = input().strip()
cnt = Counter(s)
for ch in s:
if cnt[ch] == 1:
print(ch)
exit()
print(-1)代码解析
Counter(s) -
字符频率统计
Counter("asdfasdfo")
# → Counter({'a': 2, 's': 2, 'd': 2, 'f': 2, 'o': 1})遍历原字符串保证顺序
for ch in s: # 按原顺序遍历
if cnt[ch] == 1: # 第一个计数为1的即为答案
print(ch)
exit() # 找到后立即退出为什么不能遍历 cnt.keys()?
# cnt.keys() 的顺序是随机的(Python 3.7+ 字典保持插入顺序,但Counter的顺序不保证对应原字符串)
for ch in cnt: # ❌ 错误:无法保证是原字符串中的"第一个"
if cnt[ch] == 1:
print(ch)exit() - 提前退出程序
找到答案后立即退出,避免继续无效遍历。
时间复杂度
- O(n) - Counter 统计 O(n),顺序查找 O(n)
空间复杂度
- O(k) - 存储字符频率,k 为字符种类数
第一个只出现一次的字符(HJ13)
https://mingsm17518.github.io/2026/04/09/algorithm/华为机考/nowcoder/String/13_first_unique_char/