更正: 本文中前缀函数的最后一个应该是5而不是0
但是这并不影响, 因为事实上我们用不到那么多前缀函数
首先我们约定index全部从1开始。
pi[1] = 0,意思是长度为1的字符串没有border。border就是前缀和后缀相等的部分的长度,具有极大性。
如图,红字上面是index,匹配串的下面是其对应的前缀函数:
首先发现index = 6处不同
此时前一位的前缀函数为2
前缀函数为2,代表这两个相同
所以我直接移过来,继续开始找
在index = 14的地方又发现了不同,所以移动
还是不同,所以移动
还是不同,左边的前缀函数是0,但我不能总移动0吧,所以移动1
然后我终于找到了,返回14