Поиск подстроки - Алгоритмика
Поиск подстроки

Поиск подстроки

Рассмотрим задачу, которая возникает каждый раз, когда вы делаете ctrl+f:

Есть большой текст tt. Нужно найти все вхождения строки ss в него.

Наивное решение со сравнением всех подстрок tt длины s|s| со строкой ss работает за O(ts)O(|t| \cdot |s|). Если текст большой, то длинные слова в нем искать становится очень долго.

Однако существует множество способов решить эту задачу за O(s+t)O(|s| + |t|), два самых распространённых и простых из них: через префикс-функцию и через z-функцию (примечание: не «зи», а «зет»).