Saltar al contenido principal

¿Son Anagramas?

Determina si dos strings son anagramas — contienen exactamente las mismas letras en diferente orden. Un reto clásico de strings y diccionarios.

Counter sorted() str.lower() collections comparación de dicts

El problema

Escribe una función son_anagramas(a, b) que devuelva True si los dos strings son anagramas entre sí.

Dos strings son anagramas si contienen exactamente las mismas letras con la misma frecuencia, ignorando mayúsculas y espacios.

Ejemplos

abresultado
"listen""silent"True
"Amor""Roma"True
"hello""world"False
"anagram""nagaram"True
"rat""car"False

Código inicial

def son_anagramas(a, b):
    # Tu código aquí
    pass


print(son_anagramas("listen", "silent"))  # True
print(son_anagramas("Amor", "Roma"))      # True
print(son_anagramas("hello", "world"))    # False

Concepto clave: frecuencia de caracteres

Dos strings son anagramas cuando tienen exactamente las mismas letras con la misma frecuencia:

"listen" → {l:1, i:1, s:1, t:1, e:1, n:1}
"silent" → {s:1, i:1, l:1, e:1, n:1, t:1}
# Son iguales → anagramas ✓

Versión con sorted (sin Counter)

def son_anagramas_sort(a, b):
    limpiar = lambda s: sorted(s.lower().replace(" ", ""))
    return limpiar(a) == limpiar(b)

Ambas versiones son válidas. La de sorted es O(n log n); la de Counter es O(n). Para strings cortos la diferencia es negligible.

Próximos pasos

  • Escribe una función agrupar_anagramas(palabras) que agrupe una lista de palabras en grupos de anagramas
  • Ejemplo: ["eat", "tea", "tan", "ate", "nat", "bat"][["eat","tea","ate"], ["tan","nat"], ["bat"]]