Алгоритм Кнута-Морриса-Пратта (КМП-алгоритм) работает следующим образом:                                                                          ru.wikipedia.org                      
  - Даны образец (строка) S и строка T.                                                                          ru.wikipedia.org                       Требуется определить индекс, начиная с которого образец S содержится в строке T.                                                                          ru.wikipedia.org                       Если S не содержится в T — вернуть индекс, который не может быть интерпретирован как позиция в строке (например, отрицательное число).                                                                          ru.wikipedia.org                      
  - Идея алгоритма состоит в том, чтобы не прикладывать подстроку к строке со сдвигом всего в один символ, а максимально увеличить это расстояние, сократив таким образом количество сравнений.                                                                          web.snauka.ru                      
  - Первоначально необходимо найти все префиксы строки W, равные её суффиксам, то есть найти грани текста.                                                                          web.snauka.ru                       Для каждой позиции j в слове будет своя величина грани, и величина граней не зависит от подстроки, а зависит только от строки W, поэтому необходимо предварительно вычислить массив (коллекцию) значений граней подстроки W.                                                                          web.snauka.ru                      
  - Перед началом работы алгоритма Кнута-Морриса-Пратта необходимо вычислить массив граней подстроки W, а затем прикладывать подстроку к строке со сдвигом, где — текущая позиция в слове, — величина грани слова в позиции.                                                                          web.snauka.ru                      
  
 Время работы алгоритма линейно зависит от объёма входных данных, то есть разработать асимптотически более эффективный алгоритм невозможно.                                                                          ru.wikipedia.org