在 Java 中找到第一个重复出现的字母
Find the first Recurring letter in Java
我编写了如下代码,但它没有正确 return 第一个重复出现的字母。
示例:
在单词 "statistics"
中,重复出现的字母是 s
、t
和 i
。但是字母 t
比字母 s
和 i
更早出现,但是我的程序 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
更好的方法名称。
我编写了如下代码,但它没有正确 return 第一个重复出现的字母。
示例:
在单词 "statistics"
中,重复出现的字母是 s
、t
和 i
。但是字母 t
比字母 s
和 i
更早出现,但是我的程序 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
更好的方法名称。