Реализовать функцию для поиска слов с переставленными буквами
Что проверяют
На позиции тестировщика код тут вторичен. Смотрят, как вы вытаскиваете требования до написания решения и какой набор проверок придумаете к готовой функции: этим тестировщик и отличается от разработчика, который просто быстро пишет цикл.
Как отвечать
Сначала уточните определение. Анаграмма это одинаковый набор букв с учётом их количества при разном порядке. Из формулировки сразу вылезают вопросы: считается ли слово анаграммой самого себя, важен ли регистр, что делать с пробелами, дефисами и цифрами, работаем ли мы с русским текстом, где есть «е» и «ё».
Базовое решение на две строки:
from collections import Counter
def are_anagrams(a: str, b: str) -> bool:
return Counter(a) == Counter(b)Счётчик линеен, сортировка даёт тот же ответ медленнее. Если задача шире и надо найти в словаре все слова с переставленными буквами, группируют по канонической форме: ключом становится отсортированная строка, и поиск превращается в одно обращение к словарю.
Дальше назовите набор проверок, ради которого вас и спрашивают: пустые строки, строки разной длины, повторяющиеся буквы, разный регистр, ведущие и хвостовые пробелы, символы кроме букв, очень длинные строки, буквы вне базовой латиницы. Отдельно составные символы Unicode: буква с диакритикой бывает одним кодом, а бывает двумя, поэтому перед сравнением строки нормализуют.
Где спотыкаются
Проверяют только счастливый путь и пару очевидных примеров. Функция проходит тесты, а на пустом входе и на строке из одного пробела ведёт себя не так, как ожидает заказчик, потому что ожидание никто не зафиксировал.
Второе: считают совпадение длин достаточной проверкой и на этом успокаиваются. Это оптимизация, а не тест: длина одинакова у огромного числа неанаграмм, и случай «та же длина, другой состав» обязателен в наборе.
Третье: недооценивают регистр и локаль. Приведение к нижнему регистру зависит от языка и для некоторых алфавитов необратимо, поэтому решение «просто приведём регистр» подтверждают тестом на конкретных данных, а не объявляют очевидным.