Recientemente me pidieron que diseñara un algoritmo que compruebe si dos cadenas son anagramas entre sí. Mi objetivo era minimizar la complejidad del espacio y el tiempo, así que se me ocurrió este algoritmo:Algoritmo de anagrama con complejidad mínima
- Crea una matriz de 26 elementos, cada uno inicializado a cero.
- Recorre la primera cadena y para cada carácter, incrementa el elemento de la matriz correspondiente a ese carácter.
- Recorre la segunda cadena y para cada carácter, disminuye el elemento de matriz correspondiente a ese carácter.
- Escanee sobre la matriz. Si todos los elementos son 0, las dos cadenas son anagramas.
Sin embargo, la complejidad temporal de este algoritmo es O (n) y no puedo encontrar un algoritmo de menor complejidad. ¿Alguien sabe de uno?
No soy un experto en esto, pero ¿no es O (n) ya bastante eficiente para algo como esto? El único defecto que estoy viendo es que te será difícil manejar "über" y "rübe" porque estás limitado a los caracteres latinos (pero si eso es una condición previa, entonces está bien). – DarkDust