Ctrl K

Кратчайшая запись с повторами

Сложная
Строку можно сжать записью m[x]: она означает строку x, повторённую m раз подряд (m — целое число ≥ 2, x сама может быть сжатой записью). Например, 3[ab] — это ababab, а 2[2[ab]c] — это ababcababc. Сжатые и обычные куски можно ставить подряд: a3[b] — это abbb. Дана строка text. Верните её кратчайшую запись. Чтобы ответ был однозначным, запись строится рекурсивно по таким правилам (функция enc(t) для строки t): 1. Если len(t) < 5, то enc(t) = t. 2. Иначе кандидат по умолчанию — сама t. Если t целиком состоит из m ≥ 2 копий более короткого блока, берём самый короткий такой блок p, и кандидатом становится m[enc(p)]. 3. Затем перебираются разрезы t = left + right слева направо; запись enc(left) + enc(right) заменяет кандидата, только если она **строго короче** текущего кандидата. Верните enc(text).
Пример 1
text="cccccc" → '6[c]'

Шесть букв c подряд: 6[c] — 4 символа вместо 6.

Пример 2
text="xyzxyzxyzq" → '3[xyz]q'

Целиком строка не повторение. Лучший разрез — после девятой буквы: 3[xyz] и q, всего 7 символов.

Пример 3
text="abab" → 'abab'

Строки короче 5 символов остаются как есть.

Ограничения
  • 1 ≤ len(text) ≤ 150
  • text состоит из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиШаблон с точкой и звёздочкой СложнаяСамый длинный сбалансированный отрезок скобок СложнаяПодходит ли строка под шаблон СложнаяПеретасовка разрезами СложнаяСколькими способами вычеркнуть Сложная
загружаем Python…
Вход
text="cccccc"
Ожидается
'6[c]'

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