void make(){
mx=1,a=2;
while (s[1+mx]==s[mx] && mx<m) mx++;
nex[1]=m,nex[2]=mx-1,a=2;
fo(i,3,m){
if (nex[i-a+1]<mx-i+1) nex[i]=nex[i-a+1];
else{
j=max(0,mx-i+1);
while (s[i+j]==s[1+j] && i+j<=m) j++;
nex[i]=j,mx=i+j-1,a=i;
}
}
a=1,mx=0;
while (s[mx+1]==t[mx+1] && mx<min(n,m)) mx++;
extend[1]=mx;
fo(i,2,n){
if (nex[i-a+1]<mx-i+1) extend[i]=nex[i-a+1];
else{
j=max(0,mx-i+1);
while (i+j<=n && j+1<=m && t[i+j]==s[j+1]) j++;
extend[i]=j,mx=i+j-1,a=i;
}
}
}
int
exkmp
最新推荐文章于 2023-03-14 16:53:46 发布