void getnext(int len){
int i = 0, j = -1;
next[0] = -1;
while (i < len) {
if (j == -1 || s1[i] == s1[j]) {
i++;
j++;
next[i] = j;
}
else
j = next[j];
}
int i = 0, j = 0, ans = 0;
int len1 = strlen(s1), len2 = strlen(s2);
getnext(len2);
while (i < len1) {
if (j == -1 || s1[i] == s2[j]) {
i++;
j++;
}
else
j = next[j];
if (j == len2) {
return true;
}
}
return false;
int i = 0, j = -1;
next[0] = -1;
while (i < len) {
if (j == -1 || s1[i] == s1[j]) {
i++;
j++;
next[i] = j;
}
else
j = next[j];
}
}
int i = 0, j = 0, ans = 0;
int len1 = strlen(s1), len2 = strlen(s2);
getnext(len2);
while (i < len1) {
if (j == -1 || s1[i] == s2[j]) {
i++;
j++;
}
else
j = next[j];
if (j == len2) {
return true;
}
}
return false;
}
j=next[j] 这句的意思:
ABCDAB
ABCDABD
↓
ABCDAB
ABCDABD
详细一点的解释:CLICK HERE