在自己电脑的devc++上过了样例,但是在你谷上显示编译失败。
#include<bits/stdc++.h> using namespace std; const int N=10050; char s1[N]; char s2[N]; int next[N]={0}; void kmp(int l) { next[1]=0; int tt=0; for(int i=2;i<=l;i++) { while(tt>0&&s1[i]!=s1[tt+1]) { tt=next[tt]; } if(s1[tt+1]==s1[i]) { tt++; } next[i]=tt; } } int main() { cin>>s2+1>>s1+1; int tt=1; int l1=strlen(s1+1); int l2=strlen(s2+1); kmp(l1); for(int i=1;i<=l2;i++) { while(tt>0&&(tt==l1||s2[i]!=s1[tt+1])) { tt=next[tt]; } if(s1[tt+1]==s2[i]) { tt++; } if(tt==l1) { printf("%d\n",i-l1+1); } } for(int i=1;i<=l1;i++) { printf("%d ",next[i]); } return 0; }