Anagrama en Java
- Encuentra Anagrama en Java
- Encuentra anagramas en Java usando XOR
- Encuentra anagramas en Java usando HashMap
Si te gusta jugar con las palabras, es posible que ya conozcas el término anagrama. Si dos cadenas contienen el mismo carácter, pero en una palabra diferente, se llaman anagrama de cada uno.
Por ejemplo, si hay dos palabras, Race
y Care
, entonces si las miras, verás que contienen el mismo carácter pero en un orden diferente.
Entonces podemos llamar a la palabra Race
y Care
anagramas entre sí.
En este artículo, veremos cómo podemos saber si dos palabras son anagramas o no. Cubriremos el tema con ejemplos y explicaciones para facilitar el tema.
Encuentra Anagrama en Java
En nuestro ejemplo a continuación, ilustramos cómo podemos verificar si las dos oraciones dadas son anagramas. Nuestro código de ejemplo será como el siguiente:
// importing necessary packages
import java.util.Arrays;
public class JavaAnagram {
static void MatchAnagram(String str1, String str2) {
String Str_1 = str1.replaceAll("\\s", ""); // Removing the spaces from the first string
String Str_2 = str2.replaceAll("\\s", ""); // Removing the spaces from the second string
boolean Status = true;
if (Str_1.length() != Str_2.length()) { // Checking the length of two string
Status = false;
} else {
// Converting all the characters to lower case and putting the chars of the string into a
// character
char[] StringArray1 = Str_1.toLowerCase().toCharArray();
char[] StringArray2 = Str_2.toLowerCase().toCharArray();
// Shorting the array.
Arrays.sort(StringArray1);
Arrays.sort(StringArray2);
// Matching both array.
Status = Arrays.equals(StringArray1, StringArray2);
}
if (Status) {
System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
} else {
System.out.println(Str_1 + " and " + Str_2 + " = Anagrams");
}
}
public static void main(String[] args) {
MatchAnagram("Keep", "Peek");
MatchAnagram("Race", "Care");
}
}
Ya comandamos el propósito de cada línea. Los principales pasos que seguimos en los programas son,
-
Primero, eliminamos todos los espacios de la oración.
-
Luego, verificamos si las dos oraciones tenían la misma longitud.
-
Si tienen la misma longitud, primero convertimos todos los caracteres a minúsculas.
-
Ahora, tomamos todos los caracteres de estas dos oraciones en dos matrices diferentes y ordenamos la matriz.
-
Por último, comparamos si ambas matrices contienen el mismo elemento.
-
Si coinciden, ambas oraciones son anagramas.
Después de ejecutar el ejemplo, verá el siguiente resultado en su consola:
Keep and Peek = anagrams
Race and Care = anagrams
Encuentra anagramas en Java usando XOR
En nuestro siguiente ejemplo, ilustraremos cómo podemos encontrar anagramas en Java usando bit a bit XOR. El código será el siguiente:
public class JavaAnagram {
public static void main(String[] args) {
// Declaring two string
String STR_1 = "Race";
String STR_2 = "Care";
if (AnagramChecking(STR_1, STR_2))
System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
else
System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
}
public static boolean AnagramChecking(String STR_1, String STR_2) {
// Remove all white spaces, convert to lower case & character array
char[] StringArr1 = STR_1.replaceAll("\\s", "").toLowerCase().toCharArray();
char[] StringArr2 = STR_2.replaceAll("\\s", "").toLowerCase().toCharArray();
if (StringArr1.length != StringArr2.length) // Matching the length
return false;
int DoXOR = 0;
for (int i = 0; i < StringArr1.length; i++) // Performing XOR operation
{
DoXOR ^= StringArr1[i] ^ StringArr2[i];
}
return DoXOR == 0 ? true : false;
}
}
Hemos indicado el propósito de cada línea. Ahora, después de ejecutar el código de ejemplo, verá el siguiente resultado en su consola:
Race & Care = Anagrams
Encuentra anagramas en Java usando HashMap
En nuestro ejemplo a continuación, ilustraremos cómo podemos encontrar anagramas en Java usando HashMap. El código será el siguiente:
// importing necessary packages
import java.util.HashMap;
public class JavaAnagram {
public static void main(String[] args) {
// Declaring two string
String STR_1 = "Race";
String STR_2 = "Care";
if (AnagramCheck(STR_1.toLowerCase(), STR_2.toLowerCase()))
System.out.println(STR_1 + " & " + STR_2 + " = Anagrams");
else
System.out.println(STR_1 + " & " + STR_2 + " = Not Anagrams");
}
public static boolean AnagramCheck(String STR_1, String STR_2) {
if (STR_1.length() != STR_2.length()) // Matching the length
return false;
HashMap<Character, Integer> MyMap = new HashMap<Character, Integer>(); // Declaring a hashmap
for (int i = 0; i < STR_1.length(); i++) {
char ch = STR_1.charAt(i);
if (MyMap.containsKey(ch))
MyMap.put(ch, MyMap.get(ch) + 1);
else
MyMap.put(ch, 1);
}
for (int i = 0; i < STR_2.length(); i++) {
char ch = STR_2.charAt(i);
if (MyMap.containsKey(ch)) {
if (MyMap.get(ch) == 1)
MyMap.remove(ch);
else
MyMap.put(ch, MyMap.get(ch) - 1);
} else
return false;
}
if (MyMap.size() > 0)
return false;
return true;
}
}
Ahora, después de ejecutar el código de ejemplo, verá el siguiente resultado en su consola:
Race & Care = Anagrams
Tenga en cuenta que los ejemplos de código compartidos aquí están en Java y debe instalar Java en su entorno si su sistema no contiene Java.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn