求next值有三种方式。
一、将maxl值右移一位,然后开头补-1
void GetNext (char s[], int next[]) {
int i, j = -1;
i = 0;
next[0] = -1;
while (i < strlen (s)) {
if (j == -1 || s[i] == s[j]) {
++i;
++j;
next[i] = j;
}
else {
j = next[j];
}
}
}
二、统一将maxl值-1
void GetNext (char s[], int next[]){
int i,j;
j = -1;
next[0] = -1;
for (i = 1; i < strlen(s); i++){
while (s[i] != s[j + 1] && j != -1) {
j = next[j];
}
if (s[i] == s[j+1]) j++;
next[i] = j;
}
}
三、方式一统一加1