hdu-2087(kmp)
题意:模板题,在第一个串中有几个第二个串
解题思路:板子题,拿来练手的;
代码:
#include<iostream> #include<algorithm> #include<cstring> #define maxn 2005 using namespace std; int next1[maxn]; int slen,tlen; char s[maxn]; char t[maxn]; void get_next() { int j=0,k=-1; next1[0]=-1; while(j<tlen) { if(k==-1||t[j]==t[k]) next1[++j]=++k; else k=next1[k]; } } int kmp_count() { int i=0,j=0,ans=0; if(slen==1&&tlen==1) { if(s[0]==t[0]) return 1; else return 0; } for(int i=0;i<slen;i++) { while(j>0&&s[i]!=t[j]) j=next1[j]; if(s[i]==t[j]) j++; if(j==tlen) { ans++; j=next1[j]; } } return ans; } int main() { while(cin>>s) { if(s[0]=='#') return 0; cin>>t; slen=strlen(s); tlen=strlen(t); cout<<kmp_count()<<endl; } return 0; }