KMP模型
摘取自v_JULY_v大神的博客从头到尾彻底理解KMP
代码
生成next数组
void GetNextval(char* p, int nexts[])
{
int pLen = strlen(p);
nexts[0] = -1;
int k = -1;
int j = 0;
while (j < pLen - 1)
{
//p[k]表示前缀,p[j]表示后缀
if (k == -1 || p[j] == p[k])
{
++j;
++k;
if(p[j]!=p[k]) nexts[j]=k;
else nexts[j]=nexts[k];
}
else k=nexts[k];
}
}
KMP
int KmpSearch(char *s, char* p)
{ int i = 0;
int j = 0;
int sLen = strlen(s);
int pLen = strlen(p);
while (i < sLen && j < pLen)
{ if(j == -1 || s[i] == p[j])
{
i++;
j++;
}
else j = nexts[j];
}
if(j== pLen) return i-j;
else return -1;
}
123

被折叠的 条评论
为什么被折叠?



