这道题是KMP的模板。
KMP需要注意的细节有很多,所以把这篇文章发上来供参考;
#include <bits/stdc++.h> using namespace std; char a[1000010],b[1000010]; int nxt[1000010]; int n,m; void pre() { nxt[1]=0; int j=0; for(int i=1;i<=m;i++){ while(j>0&&b[i+1]!=b[j+1]) j=nxt[j]; if(b[j+1]==b[i+1]) ++j; nxt[i+1]=j; } } int KMP() { int j=0,cnt=0; for(int i=0;i<=n;i++){ while(j>0&&a[i+1]!=b[j+1]) j=nxt[j]; if(b[j+1]==a[i+1]) ++j; if(j==m){ ++cnt; } } return cnt; } int main() { cin>>a+1; cin>>b+1; n=strlen(a+1); m=strlen(b+1); pre(); cout<<KMP(); }