Ctrl K

Кратчайшее однозначное сокращение

Сложная
Слово можно сократить, заменив несколько непересекающихся и не соседних друг с другом отрезков букв их длинами. Например, у слова transport есть сокращения t7t, tr2sp3, 9 и transport (ничего не заменено), а t25t недопустимо: заменённые отрезки «ran» и «sport» стоят вплотную. Длина сокращения — это число оставленных букв плюс число заменённых отрезков: у t7t длина 3, у tr2sp3 — 6. Сокращение подходит к слову, если его можно получить из этого слова описанным способом. Даны слово word и словарь vocabulary. Найдите сокращение word наименьшей длины, которое не подходит ни к одному слову словаря. Если кратчайших несколько, верните то, что прячет буквы как можно левее: сравнивая два кандидата по позициям слева направо, при первом различии выбирайте тот, где буква на этой позиции скрыта в числе.
Пример 1
word='cat', vocabulary=['cut'] → '1a1'

«3», «c2» и «2t» подходят и к «cut». Среди сокращений длины 3 первым по правилу идёт «1a1»: оно прячет первую букву, а «cut» в нём не узнать — там на месте a стоит u.

Пример 2
word='apple', vocabulary=[] → '5'

Словарь пуст, поэтому годится самое короткое сокращение — одно число.

Пример 3
word='plan', vocabulary=['plum', 'clan'] → 'p2n'

Все сокращения длины 2 подходят к одному из слов словаря. Из сокращений длины 3 конфликта нет только у «p2n»: «plum» кончается на m, а «clan» начинается с c.

Ограничения
  • 1 ≤ word.length ≤ 21
  • 0 ≤ vocabulary.length ≤ 1000
  • Если k — число слов словаря той же длины, что и word, то k · 2^word.length ≤ 2²¹
  • 1 ≤ vocabulary[i].length ≤ 100
  • Все слова состоят из строчных латинских букв
  • word нет в словаре
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЛучший набор слов из фишек СложнаяВсе способы расставить пробелы СложнаяСлова в буквенной сетке СложнаяЗеркальные блоки из слов СложнаяКак рассчитаться за меньше переводов Сложная
загружаем Python…
Вход
word='cat', vocabulary=['cut']
Ожидается
'1a1'

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