KMP的重要性无需多言
计算失配函数
int f[maxn];
void getfail(char* P)
{
int m=strlen(P);
f[0]=0;f[1]=0;
for(int i=1;i<m;i++)
{
int j=f[i];
while(j && P[i]!=P[j]) j=f[j];
f[i+1]=P[i]==P[j]?j+1:0;
}
}
find函数
void find(char* T,char* P)
{
int n=strlen(T),m=strlen(P);
int j=0;
for(int i=0;i<n;i++)
{
while(j && P[j]!=T[i]) j=f[j];
if(P[j]==T[i]) j++;
if(j==m)
{
operate();
j=f[j]; //注意当找到一个匹配后,往往需要沿失配边往回走一步
}
}
}