代码:
void initNextArray(string p){
int k = -1;
int j = 0;
next[0] = -1;
while(j < p.size()-1){
if(k == -1 || p[k] == p[j])
next[++j] = ++k;
else
k = next[k];
}
}
解释
关键问题:
k = next[k]怎么解释
很好理解,就是当知道next[j]的值的时候就说明j之前最后next[j]个值和最开始的next[j]个值是相同的,那么两个子串接下来延伸的时候如果t[k+1]和t[j+1]不同时,很容易想到拿开始字串的开头和结尾字串的结尾继续比较,也就是字串的公共前缀和后缀提出来比较。