Для вашего алгоритма характерно, что каждая запись в таблице либо 0, либо на 1 больше, чем предыдущая запись. Поэтому задача состоит в том, чтобы найти строку, в которой запись в таблице меньше предыдущей, но не равна 0.
Одной из таких строк является "ABACABABC" (которая взята из этой статьи в Википедии ).
Таблицы префиксов:
{0,0,1,0,1,2,3,2,0} from the linked answer
{0,0,1,0,1,2,3,0,0} your proposed code
^------different here
Интересующие записи: 3, за которыми следует 2.
Рассмотрим, что происходит, когда совпадают 7 символов. Входная строка выглядит как
ABACABA?
где? персонаж, который не соответствует, так что? не является B. ABA?
может соответствовать ABAC
, поэтому длина префикса равна 3.
Теперь рассмотрим, что происходит, когда совпадают 8 символов:
ABACABAB?
где? не является C. В этом случае AB?
может соответствовать ABA
, поэтому длина префикса равна 2.
Это показывает, что таблица префиксов может иметь запись, которая меньше предыдущей записи, но не 0.