Ctrl K

Самая маленькая строка по плану совпадений

Сложная
Даны строка-план plan длины n из символов T и F и строка-штамп stamp длины m. Нужно собрать строку result длины n + m - 1 из строчных латинских букв так, чтобы для каждой позиции i от 0 до n - 1: - если plan[i] == 'T', то кусок result[i..i + m - 1] в точности равен stamp; - если plan[i] == 'F', то этот кусок от stamp отличается. Верните лексикографически наименьшую такую строку. Если собрать её невозможно, верните пустую строку.
Пример 1
plan="FTF", stamp="ca" → 'acaa'

Результат длины 3 + 2 − 1 = 4. Из-за T на позиции 1 символы 1–2 — это ca. Свободные позиции 0 и 3 заполняем буквой a: окна ac и aa не равны ca, как и требуют две F. Ответ acaa.

Пример 2
plan="TT", stamp="ab" → ''

Первое окно требует b на позиции 1, второе — a там же. Противоречие, ответ — пустая строка.

Пример 3
plan="FF", stamp="a" → 'bb'

Ни одна буква не может быть a, поэтому самая маленькая строка — bb.

Ограничения
  • 1 ≤ len(plan) ≤ 10⁴
  • 1 ≤ len(stamp) ≤ 500
  • plan состоит только из символов T и F
  • stamp состоит из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПодходит ли строка под шаблон СложнаяПалиндром дописыванием слева СложнаяОдинаковые буквы на расстоянии СложнаяДовести пароль до надёжного СложнаяРазличимые сокращения слов Сложная
загружаем Python…
Вход
plan="FTF", stamp="ca"
Ожидается
'acaa'

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