Ctrl K

Классы перестановок по чётности

Средняя
Дан список words строк одинаковой длины из строчных латинских букв. За один ход в строке можно поменять местами два символа, стоящие на позициях одной чётности: оба на чётных позициях или оба на нечётных (нумерация с нуля). Ходов можно делать сколько угодно. Назовём две строки родственными, если одну можно превратить в другую такими ходами. Родство разбивает список на классы: строки внутри класса родственны, а строки из разных классов — нет. Верните количество классов.
Пример 1
words=["stop", "pots", "tops", "opts"] → 3

Чётные позиции «stop» — s, o; нечётные — t, p. У «pots» на чётных p, t — набор другой. Классы: {stop}, {pots, tops}, {opts}. «pots» → «tops»: меняем p и t на позициях 0 и 2.

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

Буквы в слове из двух символов стоят на позициях разной чётности, их не поменять. Классы: {ab, ab} и {ba}.

Пример 3
words=["abcde", "edcba", "cbade"] → 1
Ограничения
  • 1 ≤ len(words) ≤ 10⁴
  • 1 ≤ len(words[i]) ≤ 20
  • Все строки одной длины
  • Строки состоят из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРазложить анаграммы по группам СредняяПодпоследовательность только одного слова СредняяСамые частые запросы СредняяСлово, выращенное по букве СредняяСклеить карточки контактов Средняя
загружаем Python…
Вход
words=["stop", "pots", "tops", "opts"]
Ожидается
3

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