Ctrl K

Лишние буквы под пометкой

Средняя
Дана строка text, строка pattern, которая является подпоследовательностью text, и возрастающий список marked из различных индексов строки text. Редактор разрешает стирать буквы только на отмеченных позициях — по одной за раз — и только так, чтобы после каждого стирания pattern всё ещё оставался подпоследовательностью текста. Стёртая буква оставляет пустое место: индексы остальных букв не сдвигаются. Верните, сколько букв можно стереть максимум. Напомним: строка p — подпоследовательность строки t, если p получается из t удалением некоторых символов без изменения порядка оставшихся.
Пример 1
text='banana', pattern='ban', marked=[1, 2, 3, 5] → 3

Можно стереть позиции 1 и 2: останется «b__ana», и «ban» по-прежнему читается через b, a (позиция 3) и n (позиция 4). Стереть ещё и позицию 3 нельзя: a после b останется только на позиции 5, а за ней n уже нет. Позицию 5 можно стереть всегда. Итого 3.

Пример 2
text='code', pattern='code', marked=[0, 3] → 0

Шаблон совпадает с текстом, поэтому ни одну букву стереть нельзя.

Пример 3
text='xaxbx', pattern='ab', marked=[0, 2, 4] → 3

Все отмеченные позиции — буквы x, которые шаблону не нужны, — их можно стереть все.

Ограничения
  • 1 ≤ len(text) ≤ 3000
  • 1 ≤ len(pattern) ≤ len(text)
  • 1 ≤ len(marked) ≤ len(text)
  • marked строго возрастает, 0 ≤ marked[i] < len(text)
  • text и pattern состоят из строчных латинских букв
  • pattern — подпоследовательность text
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлово растёт по букве СредняяРазбиение на слова из словаря СредняяПодпоследовательность только одного слова СредняяСлова, спрятанные в тексте СредняяСамый ценный кусок текста Средняя
загружаем Python…
Вход
text='banana', pattern='ban', marked=[1, 2, 3, 5]
Ожидается
3

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