#define Max 101
int next[Max];
void getNext(const char*t,int tl)
{
int i=0,j=-1;
next[0]=-1;
while(i<tl)
{
if(j==-1||t[i]==t[j])next[++i]=++j;
else j=next[j];
}
}
int nextval[Max];
void getNextVal(const char*t,int tl)
{
int i=0,j=-1;
nextval[0]=-1;
while(i<tl)
{
if(j==-1||t[i]==t[j])
{
if(t[++i]!=t[++j]) nextval[i]=j;
else nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
int kmp(const char*s,int sl,const char*t,int tl,int pos)
{
int i=pos,j=0;
while(i<sl&&j<tl)
{
if(j==-1||s[i]==t[j]){++i;++j;}
// else j=next[j];
else j=nextval[j];
}
if(j<tl) return -1;
else return i-tl;
}
转载于:https://www.cnblogs.com/yangjinbo28/archive/2010/04/10/1709220.html