Compruebe si dos cadenas son anagramas usando Python
- Verifique si dos cadenas son anagramas usando la clasificación en Python
- Compruebe si dos cadenas son anagramas mediante diccionarios de frecuencia en Python
Un anagrama es una palabra formada reordenando las letras de alguna otra palabra.
Por ejemplo, race
y care
, listen
y silent
, fried
y fired
, knee
y keen
son algunos pares de anagramas. dad
y bad
, apple
y mango
, hello
y world
no son anagramas.
Utilizando lenguajes de programación, podemos comprobar rápidamente si dos cadenas son anagramas entre sí o no.
Este artículo mostrará cómo verificar si dos cadenas son anagramas o no usan Python. Hablaremos de algunos enfoques para el mismo.
Verifique si dos cadenas son anagramas usando la clasificación en Python
Para comprobar si dos cadenas son anagramas o no, podemos ordenar las dos cadenas y comprobar si son iguales o no. Consulte el siguiente código para el mismo.
La complejidad temporal del código es O(nlogn)
debido a la clasificación, y la complejidad espacial es O(1)
, porque no estamos almacenando ningún valor.
def check_anagram(a, b):
if a is None or b is None or len(a) != len(b):
return "Not Anagram"
return "Anagram" if sorted(a) == sorted(b) else "Not Anagram"
print(check_anagram("keen", "knee"))
print(check_anagram("race", "care"))
print(check_anagram("fried", "fired"))
print(check_anagram("apple", "paddle"))
print(check_anagram("first", "second"))
print(check_anagram(None, "second"))
print(check_anagram("first", None))
print(check_anagram(None, None))
Producción :
Anagram
Anagram
Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Compruebe si dos cadenas son anagramas mediante diccionarios de frecuencia en Python
Para comprobar si dos cadenas son anagramas, podemos mantener el recuento de caracteres presentes en ambas cadenas y comparar los recuentos. Si fueran iguales, esto significa que las dos cadenas son anagramas. De lo contrario, no lo son.
Consulte el siguiente código para el mismo.
La complejidad de tiempo de la siguiente solución es O(n)
ya que estamos iterando sobre las dos cadenas. La complejidad de tiempo promedio de agregar un elemento al diccionario y recuperar un elemento es O(1)
.
Además, comparar dos diccionarios con el mismo número de claves es O(n)
. Y la complejidad del espacio es O(n)
porque mantenemos dos diccionarios y, entre bastidores, los diccionarios utilizan matrices para almacenar claves y valores.
def check_anagram(a, b):
if a is None or b is None or len(a) != len(b):
return "Not Anagram"
counts_a = {}
counts_b = {}
for x in a:
if x not in counts_a.keys():
counts_a[x] = 1
else:
counts_a[x] += 1
for x in b:
if x not in counts_b.keys():
counts_b[x] = 1
else:
counts_b[x] += 1
return "Anagram" if counts_a == counts_b else "Not Anagram"
print(check_anagram("keen", "knee"))
print(check_anagram("race", "care"))
print(check_anagram("fried", "fired"))
print(check_anagram("apple", "paddle"))
print(check_anagram("first", "second"))
print(check_anagram(None, "second"))
print(check_anagram("first", None))
print(check_anagram(None, None))
Producción :
Anagram
Anagram
Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram