Ctrl K

Слово рядом с якорем

Сложная
Даны строка text, два слова word и anchor и число reach. Позиция i считается *удачной*, если: - с позиции i в text начинается word, то есть text[i : i + len(word)] == word; - есть позиция j, с которой в text начинается anchor, и при этом |i − j| ≤ reach. Вхождения могут перекрываться, а j может совпадать с i. Верните все удачные позиции по возрастанию (нумерация с нуля).
Пример 1
text="catnapdogcatnapcat", word="cat", anchor="dog", reach=4 → [9]

cat начинается в позициях 0, 9 и 15, dog — в позиции 6. Подходят 9 (|9 − 6| = 3) и не подходят 0 и 15 (расстояние 6 и 9).

Пример 2
text="aaaa", word="aa", anchor="aaa", reach=1 → [0, 1, 2]

Вхождения могут перекрываться. aa начинается в 0, 1 и 2, aaa — в 0 и 1. Каждой позиции aa найдётся aaa не дальше чем на 1.

Пример 3
text="hello", word="lo", anchor="xyz", reach=5 → []
Ограничения
  • 1 ≤ reach ≤ len(text) ≤ 5 · 10⁵
  • 1 ≤ len(word), len(anchor) ≤ 5 · 10⁵
  • Все строки состоят из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЯкорь рядом с напарником СредняяХвосты, повторяющие начало СложнаяФраза из начал слов: длинная версия СложнаяЦель из начал слов СредняяПалиндром дописыванием слева Сложная
загружаем Python…
Вход
text="catnapdogcatnapcat", word="cat", anchor="dog", reach=4
Ожидается
[9]

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