hdu-2087(kmp)
阿新 • • 發佈:2018-07-08
highlight ostream brush max pre count() true () turn
題意:模板題,在第一個串中有幾個第二個串
解題思路:板子題,拿來練手的;
代碼:
#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; }
hdu-2087(kmp)