您的位置:首页 > 其它

【大渣】KMP算法

2015-07-24 15:07 176 查看
分为两个部分

首先需声明

char A[],B[];
int F[],n,m,i,j;
scanf("%s%s",&A[1],&B[1]);
A[0]=B[0]=' ';
n=strlen(A)-1;
m=strlen(B)-1;


//需加入<cstring>

第一部分为求Fail数组

F[1]=j=0;
for(i=2;i<=m;i++)
{
while(j>0&&B[j+1]!=B[i])j=F[j];
if(B[j+1]==B[i])j++:
F[i]=j;
}
//此时B[ ]为子串

第二部分

j=0;
for(i=1;i<=n;i++)
{
while(j>0&&B[j+1]!=A[i])j=F[j];
if(B[j+1]==A[i])j++;
if(j==m)
{
cout<<"match:"<<i-m+1<<endl;
j=F[j];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: