KMP 字符串匹配
luckydrawbox · · 个人记录
求字符串
变量
函数
struct KMP{
int nxt[N],f[N];
void qnext(string a)
{
int l1=a.size();
for(int i=1,j;i<l1;i++)
{
j=nxt[i];
while(j&&a[j]^a[i])
j=nxt[j];
nxt[i+1]=(a[i]^a[j]?0:j+1);
}
}
void qf(string a,string b)
{
int l1=a.size(),l2=b.size();
for(int i=0,j=0;i<l2;i++)
{
while(j&&a[j]^b[i])
j=nxt[j];
if(!(a[j]^b[i]))
j++;
f[i]=j;
if(!(f[i]^l1))
cout<<i-l1+2<<endl;
}
}
};