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;
}
kmp模板
最新推荐文章于 2019-09-17 23:11:11 发布