KMP算法 学习笔记
学习知乎大牛 https://www.zhihu.com/question/21923021 笔记,检查最大交集前缀字符串里next值
此处next[3]等于1,j=next[j],j的值成为1,指向串的最大前后缀交集的前缀的尾。
一定记得j指向的是什么?next[j]指的又是什么?
用文字表述下代码的流程
1、给j和i和next[i]赋初值
2、只要next数组没有计算完成进行以下步骤
3、j == -1(判断开始?)或者p[i] ==p[j](主串的前缀尾与后缀尾是否一致?)
4、若一致赋值next[i] = j; j指向字串最大前缀后一个字符串,同时也代表前缀后缀交集的最大长度。
5、若不满足3条件,则代表前缀后缀交集没法增加了,所以就缩短前缀。。。。。此处又卡住了。。。。。。如图1,显然后缀尾与前缀尾不一致,需要缩短长度,那么缩短长度为多少呢?
需要看前缀next值了,也就是abab 不行,就找aba的前后缀交集
发现此时j指向了b,一样j指向的公共交集的前缀尾字符a,在后缀就有一样的字符a,
然后判断 ab 是否 匹配 ac
乱七八糟 ,,,一定要感受那个中庸的思想,太极生两仪,两仪生四象,四象生八卦。。。
主串分前后缀。。前或后缀再分前或后缀。。。