Discusión
Anagrama Solución en O(n + m) con sumas
Se pueden contar todos los caracteres del primer string dentro de un diccionario e ir sumando de a 1 si ya existe dentro de el, despues basta con validar si los caracteres del segundo diccionario existen en el diccionario en caso de que si se resta 1 al valor que tenga almacenado finalmente si es un anagrama la suma de todos los valores del diccionario debe ser 0
def are_anagrams(first: str, second: str) -> bool:
# Escribe tu solución aquí
first_frecuency = {}
first = first.lower().strip().replace(" ", "")
second = second.lower().strip().replace(" ", "")
for char in first:
if char not in first_frecuency:
first_frecuency[char] = 1
else:
first_frecuency[char] = first_frecuency[char] + 1
for char in second:
if char not in first_frecuency:
return False
if char in first_frecuency:
first_frecuency[char] = first_frecuency[char] - 1
return True if sum(first_frecuency.values()) == 0 else False
Ese primer codigo es la version "verbosa" pero puede hacerse de este modo también
def normalize(s: str) -> str:
return s.lower().strip().replace(" ", "")
def are_anagrams(first: str, second: str) -> bool:
first = normalize(first)
second = normalize(second)
if len(first) != len(second):
return False
frequency: dict[str, int] = {}
for char in first:
frequency[char] = frequency.get(char, 0) + 1
for char in second:
if char not in frequency:
return False
frequency[char] -= 1
return all(count == 0 for count in frequency.values())
0respuestas