Ctrl K

Одинаковые буквы на расстоянии

Сложная
Дана строка text из строчных латинских букв и число gap. Переставьте буквы так, чтобы любые две одинаковые буквы стояли на расстоянии не меньше gap (расстояние между позициями i и j равно |i − j|). При gap ≤ 1 ограничений нет. Подходящих перестановок обычно много, поэтому постройте вот эту. Заполняйте строку слева направо; на каждой позиции рассматривайте буквы, у которых ещё остались копии и которые не стояли ни на одной из предыдущих gap − 1 позиций. Из них возьмите букву с наибольшим числом оставшихся копий, а при равенстве — первую по алфавиту. Если на какой-то позиции подходящей буквы нет, верните пустую строку "". Так случается ровно тогда, когда нужной перестановки не существует.
Пример 1
text="ppqqr", gap=2 → 'pqpqr'

Шаг 0: у p и q по 2 копии, берём p. Шаг 1: p только что стояла, берём q. Шаг 2: у p и q по одной копии, p раньше по алфавиту. Шаг 3: q. Шаг 4: r. Получаем pqpqr.

Пример 2
text="xxxy", gap=2 → ''

Три буквы x на расстоянии хотя бы 2 друг от друга требуют строки длиной не меньше 5, а у нас 4 буквы.

Пример 3
text="banana", gap=0 → 'aanabn'
Ограничения
  • 0 ≤ len(text) ≤ 3·10⁵
  • text состоит из строчных латинских букв
  • 0 ≤ gap ≤ len(text)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиБез одинаковых соседей СредняяЗаполнить пропуски с минимумом повторов СредняяСимволы, сгруппированные по частоте СредняяЗадания с перерывом на остывание СредняяСамые частые запросы Средняя
загружаем Python…
Вход
text="ppqqr", gap=2
Ожидается
'pqpqr'

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