Ctrl K

Эстафета слов по одной букве

Средняя
Даны массив различных слов words и массив colors той же длины: colors[i] — цвет карточки, на которой написано слово words[i]. Составьте эстафету: выберите несколько карточек, сохраняя их порядок в массиве (пропускать можно любые), так, чтобы у любых двух соседних выбранных карточек: - цвета были разными; - слова были одинаковой длины и отличались ровно в одной позиции. Верните слова самой длинной эстафеты по порядку. Если самых длинных эстафет несколько, выбирайте так: последняя карточка — с наименьшим возможным индексом; затем, двигаясь от конца к началу, каждая предыдущая карточка — тоже с наименьшим возможным индексом (при условии, что эстафета остаётся самой длинной). Эстафета из одной карточки допустима всегда.
Пример 1
words=['cold', 'cord', 'card', 'ward', 'word'], colors=[1, 2, 1, 2, 2] → ['cold', 'cord', 'card', 'ward']

Цепочка cold → cord → card → ward: соседние слова отличаются ровно одной буквой, а их цвета чередуются. word к ward не присоединить: у них один цвет.

Пример 2
words=['map', 'mop', 'top'], colors=[3, 3, 1] → ['mop', 'top']

map и mop одного цвета, а map и top отличаются двумя буквами. Самая длинная цепочка — mop → top.

Пример 3
words=['sun', 'moon', 'soon'], colors=[1, 2, 3] → ['moon', 'soon']

Подходят moon → soon (длина 2). Цепочки длины 2 больше нет, так что ответ однозначен.

Ограничения
  • 1 ≤ n = len(words) = len(colors) ≤ 1000
  • 1 ≤ len(words[i]) ≤ 10, только строчные латинские буквы
  • Все слова различны
  • 1 ≤ colors[i] ≤ n
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРазбиение на слова из словаря СредняяФраза на табло СредняяБитовые строки в пределах бюджета СредняяСлова, спрятанные в тексте СредняяСлово растёт по букве Средняя
загружаем Python…
Вход
words=['cold', 'cord', 'card', 'ward', 'word'], colors=[1, 2, 1, 2, 2]
Ожидается
['cold', 'cord', 'card', 'ward']

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