KMP

//kuangbin的模板:
int S[maxn]; int T[maxn]; int next_[maxn]; int tlen,slen; void GetNext() { int k=-1; next_[0]=-1; int j=0; while(j<tlen) { if(k==-1||T[j]==T[k]) next_[++j]=++k; else k=next_[k]; } } //返回第一个匹配字符串的起始位置下标 int KMP_Index() { int i=0,j=0; GetNext(); while(i<slen&&j<tlen) { if(j==-1||S[i]==T[j]) ++i,++j; else j=next_[j]; } if(j==tlen) return i-tlen+1; else return -1; } //找出匹配字符串出现多少次 int KMP_Count() { int res=0; int j=0; if(slen==1&&tlen==1) { if(S[0]==T[0]) return 1; else return 0; } GetNext(); for(int i=0;i<slen;i++) { while(j>0&&S[i]!=T[j]) j=next_[j]; if(S[i]==T[j]) ++j; if(j==tlen) { res++; j=next_[j]; } } return res; }
posted @ 2017-09-11 08:09  愿~得偿所愿,不负时光  阅读(181)  评论(0编辑  收藏  举报