¿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
| a | b | resultado |
|---|---|---|
"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"]]