Сравните счётчики символов двух строк. Это учитывает и состав, и число повторений, в отличие от сравнения set.
Проверка одинаковости наборов символов в двух строках
Сравните счётчики символов двух строк. Это учитывает и состав, и число повторений, в отличие от сравнения set.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, принимающую две строки и возвращающую true, если обе строки состоят из одинакового набора символов и каждый символ встречается одинаковое количество раз, при этом порядок символов может различаться.
# dog, dgo → true
# dog, dfo → false
# doog, ddog → false
Ответ
Сравните счётчики символов двух строк. Это учитывает и состав, и число повторений, в отличие от сравнения set.
from collections import Counter
def same_characters(first, second):
return Counter(first) == Counter(second)
assert same_characters('dog', 'dgo')
assert not same_characters('dog', 'dfo')
assert not same_characters('doog', 'ddog')
Регистр и все символы учитываются буквально: 'A' отличается от 'a', пробел — полноценный символ. Если требуется иная семантика, нормализацию применяют к обеим строкам перед подсчётом.
Ожидаемое время — O(n + m), память — O(k), где k — количество различных символов. Сортировка строк тоже работает, но обычно требует O(n log n + m log m).