在 Java 中找到第一个重复出现的字母

Find the first Recurring letter in Java

我编写了如下代码,但它没有正确 return 第一个重复出现的字母。

示例:

在单词 "statistics" 中,重复出现的字母是 sti。但是字母 t 比字母 si 更早出现,但是我的程序 returns s 而不是 t.

根据手头的任务,使用 两个 for 循环 ,我需要为 return t 做什么?

public class Main {
    public static char FRL(String word){
        for(int i = 0; i<word.length(); i++){
            for(int j = i+1; j<word.length(); j++){
                if(word.charAt(i) == word.charAt(j)){
                    return word.charAt(i);
                }
            }
        }
        return '0';
    }

    public static void main(String[] args) {
        String word = "statistics";
        if (FRL(word) != '0'){
            System.out.println(FRL(word));
        }else{
            System.out.println("No reccurring letter!");
        }
    }
}

您可以通过将遇到的每个字符存储在 HashSet:

中来减少嵌套循环并提高性能
public static char FRL(String word){
    Set<Character> seen = new HashSet<>();
    for(int i = 0; i < word.length(); i++) {
        char next = word.charAt(i);
        if (!seen.add(next)) {
            return next;
        }
    }
    return '0';
}

但是如果你有使用嵌套循环的需求,那么你应该修复内部初始化表达式条件 =13=] 循环,即我们应该检查从索引 0 开始到索引 i 不包括的字符:

public static char FRL(String word) {
    for(int i = 0; i < word.length(); i++) {
        char next = word.charAt(i);
        for(int j = 0; j < i; j++){
            if(next == word.charAt(j)) {
                return next;
            }
        }
    }
    return '0';
}

顺便说一下,getFirstRecuringLetter() 是比 FRL 更好的方法名称。