Ctrl K

Заполнить пропуски с минимумом повторов

Средняя
Дана строка pattern из строчных латинских букв и знаков ?. Каждый ? нужно заменить какой-нибудь строчной латинской буквой. **Цена** готовой строки считается так: идём по строке слева направо и за каждую букву прибавляем, сколько раз эта же буква уже встречалась левее. Например, у строки «abab» цена 0 + 0 + 1 + 1 = 2. Замените все ? так, чтобы цена получилась минимальной. Если таких вариантов несколько, верните наименьший в лексикографическом (алфавитном) порядке.
Пример 1
pattern='b??b' → 'bacb'

Две буквы b уже стоят, и одна штрафная пара от них неизбежна. Знаки вопроса выгоднее всего заменить на ещё не встречавшиеся буквы: a и c. Получаем «bacb» с ценой 1; из всех вариантов с ценой 1 он наименьший по алфавиту.

Пример 2
pattern='?zz?' → 'azzb'

Буквы a и b ещё не встречались. Важно, что меньшую a ставим в более раннюю позицию: «azzb» меньше, чем «bzza».

Пример 3
pattern='kite' → 'kite'

Знаков вопроса нет — строка возвращается как есть.

Ограничения
  • 1 ≤ len(pattern) ≤ 10⁵
  • pattern[i] — строчная латинская буква или ?
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиБез одинаковых соседей СредняяОдинаковые буквы на расстоянии СложнаяСимволы, сгруппированные по частоте СредняяЗадания с перерывом на остывание СредняяСамые частые запросы Средняя
загружаем Python…
Вход
pattern='b??b'
Ожидается
'bacb'

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