kmp算法
在KMP算法中,子串或者模式串的next函数只与子串或者模式串自身有关,
//取得模式串的next函数值的算法如下
voie get_next(char t[],int next[])
{
//s[0]与t[0]分别存贮s和t的长度
int i=1;
next[1]=0;
j=0;
while(i<t[0])
{
if(j==0 || t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
//kmp算法如下
int kmp(char s[],char t[])
{
//s[0]与t[0]分别存贮s和t的长度
int i,j;
i=j=1;
while(i<=s[0]-t[0]+1 && j<=t[0])
{
if(j==0 || s[i]==t[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j>t[0])
return i-t[0];//或者 return i-j+1;
}