SIMPLEGUY :
public class AnagramUnoptimized {
public static void main(String[] args) {
String a = "good";
String b = "ogod";
boolean isAnagram = false;
String c = a.toLowerCase();
String d = b.toLowerCase();
if(c.length()==d.length()) {
boolean [] Visited = new boolean[a.length()];
for (int i = 0; i < c.length(); i++) {
isAnagram = false;
for (int j = 0; j < d.length(); j++) {
if (c.charAt(i) == d.charAt(j) && Visited[j]==false) {
isAnagram = true;
Visited[j] = true;
}
}
if (isAnagram == false) {
break;
}
}
}
if(isAnagram==true){
System.out.println("The given Strings are Anagrams");
}
else{
System.out.println("The given Strings are not Anagrams");
}
}
}
He utilizado una matriz booleana Visitado para comprobar si los elementos repetidos, pero su ahora mostrando "No anagrama" para todas las entradas ....
¿Me puede decir lo que su muestra "No anagrama" si las cadenas han repetición de elementos ??
Arvind Kumar Avinash:
El problema con el código es va a proseguir con el bucle incluso cuando visited[j]
se cambia a true
mientras que usted necesita para romper el bucle interior en este punto. Hacerlo de la siguiente manera:
for (int j = 0; j < d.length(); j++) {
if (c.charAt(i) == d.charAt(j) && visited[j] == false) {
isAnagram = true;
visited[j] = true;
break;
}
}
La salida después de este cambio:
The given Strings are Anagrams
Una mejor manera de hacerlo sería como sigue:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String a = "good";
String b = "ogod";
char[] first = a.toLowerCase().toCharArray();
char[] second = b.toLowerCase().toCharArray();
Arrays.sort(first);
Arrays.sort(second);
boolean isAnagram = Arrays.equals(first, second);
if (isAnagram == true) {
System.out.println("The given Strings are Anagrams");
} else {
System.out.println("The given Strings are not Anagrams");
}
}
}
Salida:
The given Strings are Anagrams