KMP模板
int b[MAXM]=zero;//根据需要改char
int a[MAXN]=zero;
int next[MAXM];
void GetNext(int len)//得到b的next
{
int i,j;
for(i=1,j=0;i<=len;)
{
if(j==0||b[i-1]==b[j-1])
{
next[i]=j;
j++;
i++;
}
else
{
j=next[j];
}
}
}
int kmp(int lena,int lenb)
{
int i,j;
for(i=0,j=0;i<lena;)
{
if(j==0||a[i]==b[j])
{
if(a[i]!=b[j])
{
j=0;
i++;
continue;
}
i++;
j++;
if(j==m)
{
return i-lenb+1;//返回起始匹配位置,从1开始
}
}
else
{
j=next[j];
}
}
return -1;
}