Verifique si dos strings son anagramas entre sí usando HashMap en Java

Escriba una función para verificar si dos strings dadas son un anagrama entre sí o no. Un anagrama de una string es otra string que contiene los mismos caracteres, solo el orden de los caracteres puede ser diferente.

Por ejemplo, “abcd” y “dabc” son un anagrama el uno del otro.

check-whether-two-strings-are-anagram-of-each-other

Enfoque: los mapas hash también se pueden usar para encontrar si dos strings dadas son anagramas o no, asignando los caracteres de cada string a mapas hash individuales y comparándolos entre sí. Implementación: 

Java

// Java code to check whether two strings
// are Anagram or not using HashMap
 
import java.io.*;
import java.util.*;
 
class GFG {
 
    // Function to check whether two strings
    // are an anagram of each other
    static boolean areAnagram(String str1, String str2)
    {
 
        HashMap<Character, Integer> hmap1
            = new HashMap<Character, Integer>();
        HashMap<Character, Integer> hmap2
            = new HashMap<Character, Integer>();
 
        char arr1[] = str1.toCharArray();
        char arr2[] = str2.toCharArray();
 
        // Mapping first string
        for (int i = 0; i < arr1.length; i++) {
 
            if (hmap1.get(arr1[i]) == null) {
 
                hmap1.put(arr1[i], 1);
            }
            else {
                Integer c = (int)hmap1.get(arr1[i]);
                hmap1.put(arr1[i], ++c);
            }
        }
 
        // Mapping second String
        for (int j = 0; j < arr2.length; j++) {
 
            if (hmap2.get(arr2[j]) == null)
                hmap2.put(arr2[j], 1);
            else {
 
                Integer d = (int)hmap2.get(arr2[j]);
                hmap2.put(arr2[j], ++d);
            }
        }
 
        if (hmap1.equals(hmap2))
            return true;
        else
            return false;
    }
 
    // Test function
    public static void test(String str1, String str2)
    {
 
        System.out.println("Strings to be checked are:\n"
                        + str1 + "\n" + str2 + "\n");
 
        // Find the result
        if (areAnagram(str1, str2))
            System.out.println("The two strings are "
                            + "anagrams of each other\n");
        else
            System.out.println("The two strings are not"
                            + " anagrams of each other\n");
    }
 
    // Driver program
    public static void main(String args[])
    {
 
        // Get the Strings
        String str1 = "geeksforgeeks";
        String str2 = "forgeeksgeeks";
 
        // Test the Strings
        test(str1, str2);
 
        // Get the Strings
        str1 = "geeksforgeeks";
        str2 = "geeks";
 
        // Test the Strings
        test(str1, str2);
    }
}
Producción:

Strings to be checked are:
geeksforgeeks
forgeeksgeeks

The two strings are anagrams of each other

Strings to be checked are:
geeksforgeeks
geeks

The two strings are not anagram of each other

Complejidad de tiempo: O(l1 + l2) donde l1 y l2 son longitudes de strings.

Espacio auxiliar: O(m1 + m2) donde m1 y m2 son números de caracteres únicos en cada string.

Sugiera si alguien tiene una mejor solución que sea más eficiente en términos de espacio y tiempo.
Este artículo es una contribución de Aarti_Rathi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Artículo relacionado: Comprobar si dos strings son anagramas entre sí

Publicación traducida automáticamente

Artículo escrito por Anonymous111 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *