Поиск подстроки. Алгоритм Кнута–Морриса-Пратта.

Определения

Префикс строки A[..i] — это строка из i первых символов строки A.

Суффикс строки A[j..] — это строка из |A|-j+1 последних символов.

Не учитывая совпадение с самим собой.

Таблица 1: Префикс функция для 'abcdabscabcdabia'
подстрока префикс суффикс совпадение префикс
функция
a a a - 0
ab ab ab - 0
abc abc abc - 0
abcd abcd abcd - 0
abcda abcda abcda a 1
abcdab abcdab abcdab ab 2
abcdabs abcdabs abcdabs - 0

Ссылки по данной теме:

  1. Статья на Хабре. Поиск подстроки и смежные вопросы. 07.02.2011
  2. Статья на Хабре
  3. Статья и реализация на Питоне
  4. Алгоритм на e-maxx.ru
  5. Алгоритм
  6. Задача №1323. Префикс-функция
  7. Задача №1324. Z-функция