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

如何高效判断给定字符串仅存在单个重复字符?

判断字符串是否仅含单个重复字符的优化解法

首先明确需求:我们要实现一个方法,接收字符串后返回布尔值,判断该字符串是否仅存在单个重复字符(该字符可重复任意多次),示例参考:

  • 'abca' → True(仅字符a重复)
  • 'abab' → False(a和b都重复)
  • 'aaaa' → True(仅字符a重复)

先点评你的现有代码

你的思路方向是对的:用collections.Counter统计字符出现次数,过滤掉单次出现的字符后,判断剩余结果长度是否为1。不过这里有个小bug:在Python3中,filter()返回的是迭代器,不能直接用len(),得改成len(list(result))才能正常运行。

另外,我们可以进一步简化逻辑、提升效率,下面给出两种更优的实现方式:

方法1:简化Counter实现(简洁优先)

from collections import Counter

def has_only_one_duplicate(s):
    char_counts = Counter(s)
    # 统计出现次数大于1的字符数量
    duplicate_char_num = sum(1 for cnt in char_counts.values() if cnt > 1)
    return duplicate_char_num == 1

这个写法用生成器表达式直接统计重复字符的数量,相比原代码的filter+转列表,更简洁且内存效率更高(生成器不需要一次性加载所有结果到内存)。

方法2:提前终止的手动统计(性能优先)

如果处理的是超长字符串,我们可以在遍历过程中提前终止,不用等到统计完所有字符:

def has_only_one_duplicate(s):
    seen_chars = {}
    duplicate_chars = set()
    
    for char in s:
        if char in seen_chars:
            duplicate_chars.add(char)
            # 一旦发现第二个不同的重复字符,直接返回False
            if len(duplicate_chars) >= 2:
                return False
        else:
            seen_chars[char] = 1
    
    # 遍历结束后,检查是否只有一个重复字符
    return len(duplicate_chars) == 1

比如输入'ababxxxx',当遍历到第二个b时,我们就知道已经有两个重复字符了,直接返回False,不用处理后面的所有字符,性能会更好。

总结

  • 若追求代码简洁易读,方法1是不错的选择;
  • 若处理大字符串、追求极致性能,方法2的提前终止逻辑会更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:31:39