Анаграммы — это слова или фразы, образованные перестановкой букв другого слова или фразы. В этой статье блога мы рассмотрим различные методы проверки того, являются ли две заданные строки анаграммами друг друга. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять реализацию. Итак, приступим!
Метод 1: сортировка строк
Один из самых простых способов проверить, являются ли две строки анаграммами, — это отсортировать символы в обеих строках и сравнить их. Если отсортированные строки равны, исходные строки являются анаграммами.
def is_anagram_sort(str1, str2):
sorted_str1 = sorted(str1)
sorted_str2 = sorted(str2)
return sorted_str1 == sorted_str2
Метод 2: использование подсчета частоты символов
Другой подход заключается в подсчете частоты каждого символа в обеих строках и сравнении результатов. Если счетчики одинаковы для всех символов, строки являются анаграммами.
from collections import Counter
def is_anagram_count(str1, str2):
count_str1 = Counter(str1)
count_str2 = Counter(str2)
return count_str1 == count_str2
Метод 3: использование хэш-карт
Для решения этой проблемы мы также можем использовать хеш-карты. Мы создаем словарь, где ключи представляют символы в строках, а значения представляют количество вхождений. Сравнивая словари, мы можем определить, являются ли строки анаграммами.
def is_anagram_hash(str1, str2):
if len(str1) != len(str2):
return False
char_count = {}
for char in str1:
char_count[char] = char_count.get(char, 0) + 1
for char in str2:
if char in char_count:
char_count[char] -= 1
if char_count[char] == 0:
del char_count[char]
else:
return False
return len(char_count) == 0
Метод 4: использование массива счетчиков символов
В этом подходе мы создаем массив размером 26 (при условии, что используются только строчные буквы) для хранения количества каждого символа. Мы перебираем обе строки, увеличивая счетчик для каждого символа в одной строке и уменьшая для другой. Если массив содержит все нули в конце, строки являются анаграммами.
def is_anagram_array(str1, str2):
if len(str1) != len(str2):
return False
char_count = [0] * 26
for i in range(len(str1)):
char_count[ord(str1[i]) - ord('a')] += 1
char_count[ord(str2[i]) - ord('a')] -= 1
return all(count == 0 for count in char_count)
В этой статье мы рассмотрели несколько методов проверки того, являются ли две строки анаграммами. Мы обсудили сортировку строк, использование подсчета частоты символов, использование хэш-карт и использование массива подсчета символов. Каждый метод имеет свои преимущества и компромиссы с точки зрения временной и пространственной сложности. В зависимости от конкретных требований вашего приложения вы можете выбрать наиболее подходящий метод.