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

Java如何查找字符串中第一个重复字符?尝试后获全部重复字符

如何找到字符串中的第一个重复字符

嘿,我完全懂你的烦恼——要定位到第一个重复出现的字符,和找出所有重复字符的思路确实不一样,核心在于要抓住「首次出现重复的那个瞬间」,而不是等全部遍历完再统计。咱们先拆解问题,再一步步给出靠谱的解法。

为什么你之前会得到所有重复字符?

大概率是你先完整遍历了字符串,统计了所有字符的出现次数,再把次数大于1的字符都捞出来。这种方法能找到所有重复项,但没法直接定位到第一个出现重复的那个字符——毕竟它不管顺序,只看频次。

最优解法:边遍历边记录,遇到重复立刻返回

我们可以用一个集合来记录已经见过的字符,每遍历一个字符就检查它是否在集合里:如果在,那它就是第一个重复的;如果不在,就把它加入集合继续走。这样一次遍历就能搞定,效率拉满。

以Python为例,代码实现如下:

def find_first_duplicate(s):
    seen_chars = set()
    for char in s:
        if char in seen_chars:
            # 找到第一个重复字符,直接返回
            return char
        # 没见过的话,加入集合
        seen_chars.add(char)
    # 遍历完没找到重复,返回None
    return None

代码解释:

  • 初始化空集合seen_chars,用来存已经遍历过的字符
  • 逐个遍历字符串中的每个字符:
    • 如果当前字符已经在集合里,说明这是它第二次出现,也就是我们要找的第一个重复字符,直接返回
    • 如果不在集合里,就把它加入集合,继续遍历下一个
  • 如果整个字符串遍历完都没有重复字符,返回None

备选方案:先统计频次再遍历(适合需要复用频次数据的场景)

如果你之后还需要用到字符的频次统计,可以先统计所有字符的出现次数,再重新遍历字符串,找到第一个频次大于1的字符。这种方法需要两次遍历,但逻辑也很清晰:

from collections import Counter

def find_first_duplicate_alternative(s):
    char_counts = Counter(s)
    for char in s:
        if char_counts[char] > 1:
            return char
    return None

注意事项

  • 如果需要忽略大小写(比如把'A'和'a'视为同一个字符),可以在检查前把字符统一转成小写或大写:char.lower()
  • 特殊字符、空格等也会被正常处理,如果需要排除这类字符,可以在遍历前先过滤字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:57:31