Скользящее окно Python: найдите кратчайшую подстроку с тремя символами

Напишите решение на Python и проверьте его на странице.

Другие упражнения по этой теме: Collections в Python: задачи на ChainMap, defaultdict и deque.

Печать книжной гильдии

В мастерской книжной гильдии готовят личные печати для редких рукописей. Резчик берёт заготовку с цепочкой декоративных знаков и вырезает из неё один непрерывный кусок. На готовом оттиске должны присутствовать все три именные руны мастера, каждая ровно один раз. Любые другие знаки могут встречаться между ними или вокруг в каком угодно количестве.

Мастер бережёт материал и ищет самый короткий подходящий фрагмент. Если таких участков наименьшей длины окажется несколько, резчик выбирает тот, который находится ближе к началу заготовки.

Определите положение и длину выбранного для печати фрагмента.

Что уже дано

В заготовке программы уже подключён класс Counter из модуля collections и прочитаны две строки с помощью input():

  • runes — строка из трёх именных рун;
  • blank — строка-заготовка с цепочкой знаков.

Никаких других предварительных переменных или скрытых файлов нет.

Что нужно сделать

Допишите тело скрипта так, чтобы программа находила нужный непрерывный непустой фрагмент в строке blank и выводила результат на экран.

Фрагмент считается подходящим, если выполнены условия:

  • каждая из трёх именных рун из runes встречается в нём ровно один раз (с учётом регистра символов);
  • любые посторонние знаки могут присутствовать в любом количестве.

Среди всех подходящих фрагментов выберите тот, у которого длина минимальна. Если минимальную длину имеют несколько вариантов, выберите фрагмент с наименьшим начальным индексом.

Позиции символов в строке нумеруются с единицы. Выведите начальную позицию выбранного фрагмента и его длину через пробел. Если ни одного подходящего фрагмента в строке нет, выведите 0 0.

Ввод и вывод

Программа считывает данные из стандартного потока ввода stdin и выводит результат в стандартный поток вывода stdout.

Формат ввода

  • Первая строка содержит ровно три различные буквы ASCII (A-Z или a-z) без пробелов.
  • Вторая строка содержит заготовку длиной от 0 до 80 печатных символов ASCII (коды 32–126). Пробелы, включая начальные и завершающие, считаются знаками заготовки и учитываются в длине.

Формат вывода

Одна строка с двумя целыми числами через пробел: начальная позиция (начиная с 1) и длина найденного фрагмента, либо 0 0, если подходящего фрагмента не существует.

Пример

Ввод
ABC
xA?B#Cz
Вывод
2 5
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи