KMP 字符串匹配
求字符串 在字符串 中的每次出现的位置。
变量
-
nxt[i]:字符串的前缀函数数组。 -
f[i]:以 为开头的字符串能与 匹配的最大字符数。
函数
-
qnext(string a):求 的字符串的前缀函数数组, 的结果分别对应 。 -
qf(string a,string b):求字符串 在字符串 中的每次出现的位置, 的结果分别对应 。
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;
}
}
};

浙公网安备 33010602011771号