Anagrama en Java

MD Aminul Islam 12 octubre 2023
  1. Encuentra Anagrama en Java
  2. Encuentra anagramas en Java usando XOR
  3. Encuentra anagramas en Java usando HashMap
Anagrama en Java

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.

MD Aminul Islam avatar MD Aminul Islam avatar

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

Artículo relacionado - Java Algorithm