其他:
洛谷模板:a,b两个字符串,求b串在a串中出现的位置
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char s1[1000009],s2[1001]; int len1,len2,Next[1001]; int main(){ scanf("%s%s",s1+1,s2+1); len1=strlen(s1+1);len2=strlen(s2+1); for(int i=2,k=0;i<=len2;i++){ for(;s2[i]!=s2[k+1]&&k>0;k=Next[k]); if(s2[i]==s2[k+1])Next[i]=++k; } for(int i=1,k=0;i<=len1;i++){ for(;s1[i]!=s2[k+1]&&k>0;k=Next[k]); if(s1[i]==s2[k+1])++k; if(k==len2)printf("%d\n",i-len2+1),k=Next[k]; } for(int i=1;i<=len2;i++)printf("%d ",Next[i]); return 0; }