最近看了这个,突然似乎理解了,记录一下
比如对于子串”abcdabceedabcd”
如何计算next数组,next数组决定字符比较是跳转的位置
int next[15]={0};
next[0]=-1;
然后计算next[1]
前面只有一个a
,那么next[1]=0;
next[2]
由于前面的next[1]=0;因此,直接比较前面的一个字符‘b’和第一个字符’a’。不同,因此next[2]=0;
next[3]
同样的由于next[2]=0;直接比较前面一个字符和第一个字符,不同next[3]=0;
.
.
.
直到next[5]
前面一个字符’a’等于第一个字符(为什么和第一个比较,因为next[4]=0);next[5]=next[4]+1;
next[6]
此时next[5]不为0,因此前前面一个字符和第next[5]个字符相比较,相同
因此,next[6]=next[5]+1;如果此时不同呢,那么就和next[next[5]]个字符相比较。
。。。
。