Проверка одинаковости наборов символов в двух строках

Сравните счётчики символов двух строк. Это учитывает и состав, и число повторений, в отличие от сравнения 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).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее