Рассмотрим задачу, которая возникает каждый раз, когда вы делаете ctrl+f
:
Есть большой текст $t$. Нужно найти все вхождения строки $s$ в него.
Наивное решение со сравнением всех подстрок $t$ длины $|s|$ со строкой $s$ работает за $O(|t| \cdot |s|)$. Если текст большой, то длинные слова в нем искать становится очень долго.
Однако существует множество способов решить эту задачу за $O(|s| + |t|)$, два самых распространённых и простых из них: через префикс-функцию и через z-функцию (примечание: не «зи», а «зет»).