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

如何修改Python代码以正确获取字符串中出现次数最多的所有字符?

解决多个最高频字符的返回问题

嘿,这个问题我之前也踩过坑!你的原代码逻辑是找到第一个出现次数超过当前最大值的字符,但当有多个字符次数相同时,后面的字符就被忽略了——因为代码里只有count > max_count的时候才会更新,等于的情况完全没处理,所以只会返回第一个碰到的最高频字符(也就是例子里的'l')。

咱们来调整一下思路,改成先统计所有字符的出现次数,再筛选出次数最多的那些字符,这样就能返回所有符合条件的结果了。

方法一:用普通字典手动统计(适合理解底层逻辑)

def max_char_count(string):
    char_counts = {}
    # 先遍历一次字符串,统计每个字符的出现次数
    for char in string:
        if char in char_counts:
            char_counts[char] += 1
        else:
            char_counts[char] = 1
    
    # 找到最大的出现次数(处理空字符串的边界情况)
    max_count = max(char_counts.values()) if char_counts else 0
    
    # 收集所有出现次数等于最大值的字符
    max_chars = [char for char, count in char_counts.items() if count == max_count]
    
    return max_chars

print(max_char_count('apple hellooo'))  # 输出: ['l', 'o']

方法二:用collections.Counter简化代码(更Pythonic)

Python标准库的Counter专门用来统计可迭代对象的元素频率,用它能让代码更简洁:

from collections import Counter

def max_char_count(string):
    char_counts = Counter(string)
    if not char_counts:
        return []
    max_count = max(char_counts.values())
    # 筛选出所有次数等于最大值的字符
    max_chars = [char for char, count in char_counts.items() if count == max_count]
    return max_chars

print(max_char_count('apple hellooo'))  # 输出: ['l', 'o']

额外优化点

原代码里每次循环调用string.count(char),相当于每次都要遍历整个字符串,时间复杂度是O(n²);而修改后的代码只需要遍历字符串一次统计次数,再遍历一次字典筛选结果,时间复杂度降到了O(n),效率提升了不少哦~

另外,代码里也考虑了空字符串的情况,调用max_char_count('')会返回空列表,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:07:35