DEV//UNIT

Z-функция

z[i] — сколько символов суффикса i совпадает с префиксом. Один массив — поиск, повторы, сжатие.

время O(n)память O(n)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function zFunction(s: string): number[] {
2 const n = s.length
3 const z = [0]
4 let l = 0, r = 0 // самый правый z-бокс
5
6 for (let i = 1; i < n; i++) {
7 if (i < r) z[i] = Math.min(r - i, z[i - l]!)
8 while (i + z[i]! < n && s[z[i]!] === s[i + z[i]!]) z[i]!
9 if (i + z[i]! > r) { l = i; r = i + z[i]! }
10 }
11
12 return z
13}
14
15function zSearch(text: string, p: string): number[] {
16 const z = zFunction(p + '#' + text)
17 return z.map((v, i) => (v === p.length ? i - p.length - 1 : -1))
18 .filter((i) => i >= 0)
19}

Проблема

z[i] — сколько символов суффикса i совпадает с префиксом. Один массив — поиск, повторы, сжатие.

Что вы видите

Строка «pattern#text»: z равна длине образца ровно на его вхождениях.

Как это работает

Z-бокс — самый правый известный отрезок совпадения с префиксом; внутри него значения копируются, вне — считаются. Линейно, без откатов. Сестра π-функции из KMP.

Пошаговый разбор

  1. 01

    Z-бокс

    Самое правое совпадение с префиксом.

  2. 02

    Копирование

    Внутри бокса z уже известна.

  3. 03

    Поиск

    z = |образец| на вхождениях.

Complexity и ограничения

time
O(n)
space
O(n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Поиск

Альтернатива KMP в строковых задачах.

Сжатие

Анализ периодов и повторов.

Биоинформатика

Поиск повторов в ДНК.

Связанные алгоритмы

Shorts

«Один массив на все повторы строки»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Один массив на все повторы строки
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/z-algorithm