Алгоритм поиска подстроки в строке с помощью суффиксного массива
Пусть у нас есть образец , строка и суффиксный массив . Мы хотим найти все вхождения данного образца в данную строку.
Решение при помощи бинарного поиска
Понятно, что если образец входит в строку , то он является префиксом какого-нибудь ее суффикса. Если вхождений несколько, то в суффиксном массиве они будут находиться рядом друг с другом. Получается, что задача сводится к бинарному поиску в упорядоченном массиве.
Определим границы, в которых лежат вхождения. На первом шаге сравниваем суффикс и образец . Если суффикс лексикографически больше, то необходимо идти в левую половину , иначе в правую. На следующем шаге аналогично проверяем суффикс по середине от половины суффискного массива, затем от четверти и так далее. В результате проделанной работы получим левую и правую границы и соответственно. В этих границах и лежат вхождения образца в строку .
Время лексикографического сравнения образца с суффиксом равно длине их общего префикса и не может превышать . Поэтому время работы алгоритма равно .