int nxt[maxn];//c++11中next用作数组名会CE nxt[1]=0; for(int i=2,j=0;i<=m;i++){ while(j&&b[i]!=b[j+1]) j=nxt[j]; if(b[i]==b[j+1]) nxt[i]=j+1; } for(int i=1,j=0;i<=n;i++){//A->i B->j while((j==m)||(j&&s[i]!=s[j+1])) j=nxt[j]; if(s[i]==s[j+1]) j++; if(j==m) cout<<i<<endl; }