void getnext(int h) //获得next数组里的值的函数
{
int j=0, k=-1;
next1[0]=-1;
while(j<h)
{
if(k==-1||a[j]==a[k])
{
k++;
j++;
if(a[j]==a[k])
next1[j]=next1[k];
else next1[j]=k;
}
else k=next1[k];
}
return ;
}
void kmp() //字符串的具体操作 { int i, j, k, h=strlen(a), g=strlen(b); getnext(h); s=i=k=0; while(i<g) { if(k==-1||b[i]==a[k]) { k++; i++; } else k=next1[k]; if(k==h) //具体修改的地方 { k=next1[k]; s++; } } return ; }
例子:KMP算法POJ 3461
hdu 2087poj 2406