输入:
CEBDAEEAACEBDAE
EBDAE
输出:
2
11
0 0 0 0 1
#include<stdio.h>
char str1[1000001],str2[1000001];
int kmp[1000001];
int main(int argc,char **argv){
int len1=1,len2=1;
gets(str1+1);
gets(str2+1);
for(;str1[len1];++len1){
continue;
};
--len1;
for(;str2[len2];++len2){
continue;
};
--len2;
int pos=0;
for(int iter=2;iter<=len2;++iter){
while(pos>0&&str2[iter]!=str2[pos+1]){
pos=kmp[pos];
};
if(str2[pos+1]==str2[iter]){
++pos;
};
kmp[iter]=pos;
};
pos=0;
for(int iter=1;iter<=len1;++iter){
while(pos>0&&str2[pos+1]!=str1[iter]){
pos=kmp[pos];
};
if(str2[pos+1]==str1[iter]){
++pos;
};
if(pos==len2){
printf("%d\n",iter-len2+1);
pos=kmp[pos];
};
};
for(int iter=1;iter<=len2;++iter){
printf("%d ",kmp[iter]);
};
return 0;
};