Categorías
Algorithms

LeetCode – Anagrama válido (Java)

Dadas dos cadenas s y t, escribe una función para determinar si t es un anagrama de s.

Solución Java 1

Suponiendo que la cadena contiene solo alfabetos en minúsculas, aquí hay una solución simple.

public boolean isAnagram(String s, String t) {
    if(s==null || t==null)
        return false;
 
    if(s.length()!=t.length())
        return false;
 
    int[] arr = new int[26];
    for(int i=0; i<s.length(); i++){
        arr[s.charAt(i)-'a']++;
        arr[t.charAt(i)-'a']--;
    }
 
    for(int i: arr){
        if(i!=0)
            return false;
    }
 
    return true;
}

Solución Java 2

Si las entradas contienen caracteres Unicode, una matriz con una longitud de 26 no es suficiente.

public boolean isAnagram(String s, String t) {
    if(s.length()!=t.length())
        return false;
 
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();    
 
    for(int i=0; i<s.length(); i++){
        char c1 = s.charAt(i);
        if(map.containsKey(c1)){
            map.put(c1, map.get(c1)+1);
        }else{
            map.put(c1,1);
        }
    }
 
    for(int i=0; i<s.length(); i++){
        char c2 = t.charAt(i);
        if(map.containsKey(c2)){
            if(map.get(c2)==1){
                map.remove(c2);
            }else{
                map.put(c2, map.get(c2)-1);
            }
        }else{
            return false;
        }    
    }
 
    if(map.size()>0)
        return false;
 
    return true;
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

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