Ctrl K

Кластеры наборов букв

Сложная
Дан массив строк words. Каждая строка состоит из строчных латинских букв, и ни одна буква не повторяется внутри строки, поэтому строку можно считать множеством букв. Две строки связаны, если множество букв одной получается из множества букв другой ровно одним действием: - добавить одну букву; - удалить одну букву; - заменить одну букву на любую другую или на неё же. Связи объединяют строки в кластеры: две строки попадают в один кластер, если от одной до другой можно дойти по цепочке связей. Каждый элемент массива, включая повторы, считается отдельно. Верните [число кластеров, размер самого большого кластера].
Пример 1
words=['ab', 'abc', 'xy', 'xz', 'q'] → [3, 2]

«ab» → «abc» добавлением буквы; «xy» → «xz» заменой y на z; «q» ни с кем не связана. Три группы, самая большая из двух слов.

Пример 2
words=['ba', 'ab', 'cd'] → [2, 2]

«ba» и «ab» — одно и то же множество букв (замена буквы на саму себя), «cd» отличается от них двумя буквами.

Пример 3
words=['k', 'm', 'mn', 'mno', 'pq'] → [2, 4]

«k» → «m» заменой, «m» → «mn» → «mno» добавлением: группа из четырёх слов; «pq» отдельно.

Ограничения
  • 1 ≤ len(words) ≤ 2·10⁴
  • 1 ≤ len(words[i]) ≤ 26
  • words[i] состоит из строчных латинских букв без повторов
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКратчайшее однозначное сокращение СложнаяСемейства слов на один обмен СложнаяСклейка фрагментов СложнаяСлова для головоломок СложнаяЛучший набор слов из фишек Сложная
загружаем Python…
Вход
words=['ab', 'abc', 'xy', 'xz', 'q']
Ожидается
[3, 2]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 66 тестов на сервере, включая скрытые.