思路:
KMP模板。
1 #include<cstdio> 2 #include<cstring> 3 char s1[1000001],s2[1001]; 4 int main() { 5 scanf("%s%s",s1,s2); 6 int n=strlen(s1),m=strlen(s2); 7 int next[m+1]; 8 next[0]=-1; 9 next[1]=0; 10 int j=0; 11 for(int i=1;i<m;i++) { 12 while(j>=0&&s2[i]!=s2[j]) j=next[j]; 13 next[i+1]=++j; 14 } 15 j=0; 16 for(int i=0;i<n;i++) { 17 while(j>=0&&s1[i]!=s2[j]) j=next[j]; 18 if(++j==m) printf("%d ",i-m+2); 19 } 20 for(int i=1;i<=m;i++) printf("%d ",next[i]); 21 return 0; 22 }