kmp模板

Posted Go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }

以上是关于kmp模板的主要内容,如果未能解决你的问题,请参考以下文章

KMP模板简单写个KMP~

模板KMP字符串匹配KMP

KMP kmp模板

扩展KMP模板

扩展KMP模板

扩展KMP模板