Python을 사용하여 두 문자열이 아나그램인지 확인
아나그램은 다른 단어의 철자를 재배열하여 형성된 단어입니다.
예를 들어 race
와 care
, listen
, silent
, fried
와 fired
, knee
와 keen
은 몇 가지 아나그램 쌍입니다. dad
와 bad
, apple
과 mango
, hello
와 world
는 아나그램이 아닙니다.
프로그래밍 언어를 사용하여 두 문자열이 서로의 아나그램인지 여부를 빠르게 확인할 수 있습니다.
이 기사에서는 두 문자열이 아나그램인지 Python을 사용하지 않는지 확인하는 방법을 보여줍니다. 우리는 같은 것에 대한 몇 가지 접근 방식에 대해 이야기 할 것입니다.
Python에서 정렬을 사용하여 두 문자열이 아나그램인지 확인
두 문자열이 아나그램인지 여부를 확인하기 위해 두 문자열을 정렬하고 동일한지 여부를 확인할 수 있습니다. 동일한 내용은 다음 코드를 참조하십시오.
코드의 시간 복잡도는 정렬로 인해 O(nlogn)
이고 공간 복잡도는 값을 저장하지 않기 때문에 O(1)
입니다.
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))
출력:
Anagram
Anagram
Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Python에서 주파수 사전을 사용하여 두 문자열이 아나그램인지 확인
두 문자열이 아나그램인지 확인하기 위해 두 문자열에 있는 문자 수를 유지하고 그 수를 비교할 수 있습니다. 동일하다면 두 문자열이 아나그램임을 의미합니다. 그렇지 않으면 그렇지 않습니다.
동일한 내용은 다음 코드를 참조하십시오.
두 문자열을 반복하므로 다음 솔루션의 시간 복잡도는 O(n)
입니다. 사전에 요소를 추가하고 요소를 검색하는 평균 시간 복잡도는 O(1)
입니다.
또한 동일한 수의 키를 가진 두 사전을 비교하는 것은 O(n)
입니다. 그리고 공간 복잡도는 O(n)
입니다. 왜냐하면 우리는 두 개의 딕셔너리를 유지하고 있고, 딕셔너리는 배후에서 키와 값을 저장하기 위해 배열을 사용하기 때문입니다.
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))
출력:
Anagram
Anagram
Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram
Not Anagram