I wrote the code as follows but it doesn't return the first recurring letter properly.
Example: In the word "statistics" the recurring letters are s,t, and i but the letter t recurs sooner than the letter s and i, but my program returns s instead of t.
What do I need to do for it to return t, using two for loops, as per the task in hand?
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!");
}
}
}
CodePudding user response:
You can reduce eliminate the nested loop and improve the performance by storing every encountered character in a 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';
}
But, if you have required to use a nested loop, you should fix the initialization expression and condition of the inner for
loop (characters that you should be checked starting from index 0
and up to index i
exclusive):
public static char FRL(String word) {
for(int i = 0; i < word.length(); i ) {
for(int j = 0; j < i; j ){
if(word.charAt(i) == word.charAt(j)) {
return word.charAt(i);
}
}
}
return '0';
}
By the way, getFirstRecuringLetter()
would be a better method name than FRL
.