Ctrl K

Различимые сокращения слов

Сложная
Дан массив различных слов words. Каждому слову нужно подобрать сокращение по таким правилам. Сокращение с префиксом длины p — это первые p букв слова, затем число пропущенных букв посередине и последняя буква. Например, у internal с p = 1 сокращение i6l, а с p = 3 — int4l. Сначала у всех слов p = 1. Пока у нескольких слов сокращения совпадают, у каждого из этих слов p увеличивается на 1; так повторяется, пока все сокращения не станут разными. Если в итоге сокращение не короче самого слова, вместо него берётся слово целиком. Верните массив итоговых сокращений в том же порядке, что и words.
Пример 1
words=['apple', 'ample', 'angle', 'ankle'] → ['ap2e', 'am2e', 'angle', 'ankle']

У всех четырёх слов сокращение «a3e», поэтому первая часть растёт. При двух буквах «ap2e» и «am2e» уже уникальны, а «angle» и «ankle» различаются только третьей буквой: «ang1e» и «ank1e» не короче самих слов, поэтому они остаются как есть.

Пример 2
words=['moon', 'mean', 'star'] → ['moon', 'mean', 's2r']

«moon» и «mean» сталкиваются на «m2n», а «mo1n» и «me1n» уже не короче слов. «star» сокращается до «s2r».

Пример 3
words=['ok', 'yes'] → ['ok', 'yes']

Сокращения «o0k» и «y1s» не короче самих слов, поэтому слова остаются без изменений.

Ограничения
  • 1 ≤ words.length ≤ 400
  • 2 ≤ words[i].length ≤ 400
  • words[i] состоит только из строчных латинских букв
  • все слова в words различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамое большое число из кусков СредняяСамые частые запросы СредняяСлово, выращенное по букве СредняяСлова, спрятанные в тексте СредняяОкруглить цены до нужной суммы Средняя
загружаем Python…
Вход
words=['apple', 'ample', 'angle', 'ankle']
Ожидается
['ap2e', 'am2e', 'angle', 'ankle']

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