You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中更高效地查找首个不重复字符?

优化首个不重复字符查找函数的方案

没问题,咱们来聊聊怎么优化你这个函数,先说说原代码的问题,再给出高效的实现~

原代码的效率瓶颈

你写的这段代码逻辑是对的,但确实在处理长字符串时会很慢。原因在于:

  • 每次调用s.count(c)都会完整遍历一遍整个字符串来统计当前字符的出现次数
  • 外层又有一个遍历整个字符串的循环,所以整体时间复杂度是O(n²)——比如当字符串长度是10000时,实际要执行10000*10000=1亿次操作,效率极低

优化后的实现(O(n)时间复杂度)

我们可以用**哈希表(字典)**先统计所有字符的出现次数,再遍历一次字符串找到第一个次数为1的字符,这样只需要两次线性遍历,时间复杂度降到O(n):

def first_unique_char(s):
    # 第一步:统计每个字符的出现次数,仅遍历一次字符串
    char_count = {}
    for c in s:
        # 用get方法简化计数:如果字符不存在,默认计数0,加1后存入
        char_count[c] = char_count.get(c, 0) + 1
    
    # 第二步:再次遍历字符串,找到第一个出现次数为1的字符
    for c in s:
        if char_count[c] == 1:
            return c
    # 没有找到不重复字符时返回None
    return None

如果想让代码更简洁,也可以用Python标准库的collections.Counter(底层逻辑和上面的手动统计完全一致):

from collections import Counter

def first_unique_char(s):
    char_count = Counter(s)
    for c in s:
        if char_count[c] == 1:
            return c
    return None

为什么优化版本更优?

  1. 时间效率:

    • 两次遍历都是线性的,总时间复杂度为O(n),对于长字符串来说,性能提升是数量级的差异
    • 比如处理长度为104的字符串,原代码需要108次操作,优化后只需要2*10^4次操作
  2. 空间效率:

    • 虽然用了字典,但字符集的大小是固定的(比如小写英文字母最多26个,ASCII字符最多128个),所以字典的空间占用是常数级的,属于O(1)空间复杂度,不会随着字符串长度增长而大幅增加

测试一下你的示例:

  • first_unique_char("leetcode") → 返回"l"
  • first_unique_char("loveleetcode") → 返回"v"
  • first_unique_char("aabb") → 返回None

完全符合你的需求~

内容的提问来源于stack exchange,提问作者user32642875

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 09:22:38