KMP算法主要解决字符串匹配问题,其中失配数组next很关键;
void get_next(char *s)
{
next[0] = -1; /*next[0]初始化为-1,-1表示不存在相同的最大前缀和最大后缀*/
int k = -1; /*k初始化为-1*/
for (int i=1; i<=len-1; i++)
{
while (k>-1 && s[k+1] != s[i])
/*如果下一个不同,那么k就变成next[k],
注意next[k]是小于k的,无论k取任何值。*/
{
k = next[k]; /*往前回溯*/
}
if (s[k+1] == s[i]) /*如果相同,k++*/
{
k = k + 1;
}
next[i] = k; /*这个是把算的k的值
(就是相同的最大前缀和最大后缀长)赋给next[i]*/
}
}
excuse me???