kmp算法
int a[1000001],b[1000001],nex[1000001];
void getnext(int pat[],int nex[],int l2){
int i=0,j=-1;
nex[0]=-1;
while(i<l2){
if(j==-1||pat[i]==pat[j]){
i++;
j++;
nex[i]=j;
}
else
j=nex[j];
}
}
int kmp(int txt[],int pat[],int nex[],int l1,int l2){
getnext(pat,nex,l2);
int i=0,j=0;
while(i<l1&&j<l2){
if(txt[i]==pat[j]||j==-1){
i++;
j++;
}
else
j=nex[j];
}
if(j==l2)
return i-j;
else
return -1;
}
pat数组是待找数组,tex数组是模数组,nex是记录