kmp

来源:互联网 发布:课程与教学论 知乎 编辑:程序博客网 时间:2024/05/29 19:24
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int biao[1005],i,j,s1,s2;
char a[1000005],b[1005];
int main()
{
scanf("%s",a+1);
scanf("%s",b+1);
s1=strlen(a+1);
s2=strlen(b+1);

biao[1]=0;

j=0;
for(i=2;i<=s2;i++)
{
   while(j!=0&&b[i]!=b[j+1])j=biao[j];
   if(b[i]==b[j+1])++j;
   biao[i]=j; 
}
j=0;
for(i=1;i<=s1;i++)
    {
    while(j!=0&&a[i]!=b[j+1])j=biao[j];
    if(a[i]==b[j+1])++j;
    if(j==s2)
    {
    cout<<i-s2+1<<endl;
    j=biao[j];
}
}
for(i=1;i<=s2;i++)
{
cout<<biao[i]<<" ";
}


}
1 0
原创粉丝点击