Crea un vector con las 26 letras posibles. Atraviese la primera cadena agregando 1 a las posiciones de cada letra en el vector.
Luego recorra la segunda cadena restando 1 del vector para cada letra en la cadena.
(si encuentra un cero en el vector, puede devolver falso ya que sabe que para la letra actual la segunda cadena tiene más ocurrencias que la primera)
Finalmente suma todos los elementos en el vector, si la suma es 0 entonces tienes
anagramas
- ¿Qué significa <K extiende comparables > en Java en el contexto de hacer árboles de búsqueda binarios?
- ¿Qué es el desplazamiento binario y por qué lo usamos?
- ¿Aproximadamente cuántas personas en el mundo pueden resolver un cubo rubix sin algoritmos?
- ¿Cómo resolvería problemas de pedigrí (en biología) utilizando algoritmos genéticos?
- ¿Qué es un algoritmo hash?
Esto debería ser O (N) + O (N) + O (26) = O (N)
Lo que debería ser más rápido que ordenar ambas cadenas y comparar cuál es N log N.
Nota: Cuando analiza la segunda cadena, sale si encuentra un 0, por lo que si marca al principio que las cadenas tienen la misma longitud, no necesita sumar los elementos en el vector de conteo porque si no salió Antes de eso, después de analizar la segunda cadena, deben ser anagramas. Esto se debe a que el segundo paso solo puede disminuir desde el vector.
(Gracias Anders Kaseorg que señaló esto en los comentarios)
Este es el tipo de problema en el que la clasificación es excesiva, la clasificación le da mucho más de lo que necesita para analizar anagramas, por lo que si la clasificación es O (N log N), debe pensar que debe haber un algoritmo más rápido que eso.
“Los anagramas nunca mienten, revela un cambio de nombre”