您的位置:首页 > 其它

kmp模板

2017-03-01 22:42 176 查看
void makenext(const char *p , int *next)
{
int i=1,k=0;
int m = strlen(p);
next[0] = 0;
for(i=1,k=0; i<m; i++)
{
while(k>0 && p[i]!=p[k])
k = next[k-1];
if(p[i] == p[k])
{
k++;
}
next[i] = k;
}
}
int kmp(const char *T , const char *p, int *next)
{
int m1 = strlen(T);
int m2 = strlen(p);
int i,k,ans = 0;
makenext(p,next);
for(i=0,k=0; i<m1; i++)
{
while(k>0 && T[i]!=p[k])
k = next[k-1];
if(T[i] == p[k])
k++;
if(k == m2)
return true;
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: