KMP模版 && KMP求子串在主串出现的次数模版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP模版 && KMP求子串在主串出现的次数模版相关的知识,希望对你有一定的参考价值。
int next[MAX_LEN]; void creat_next(char *S, int Sn) { int k, q; next[0] = 0; for(k=0, q=1; q<Sn; q++){ while(k>0 && S[k]!=S[q]) k = next[k-1]; if(S[k] == S[q]){ k++; } next[q] = k; } } bool Judge(char *S, char *T, int Sn, int Tn)//S是子串,T是主串 { int q, i; for(i=0, q=0; i<Tn&&q<Sn; i++){ while(q>0 && S[q]!=T[i]) q = next[q-1]; if(S[q] == T[i]) q++; } return (q == Sn)?true:false; }
求次数:
int next[maxn]; char S[maxn], T[maxn * 100]; void creat_next() { int i = 0, j = -1; next[i] = j; while(S[i]) { if(j == -1 || S[i] == S[j]) { ++i; ++j; if(S[i] == S[j]) next[i] = next[j]; else next[i] = j; } else j = next[j]; } } int KMP_count() { creat_next(); int i = 0, j = 0, ans = 0; while(T[i]) { if(j == -1 || T[i] == S[j]) { ++i; ++j; if(!S[j]) { ++ans; j = next[j]; } } else j = next[j]; } return ans; }
以上是关于KMP模版 && KMP求子串在主串出现的次数模版的主要内容,如果未能解决你的问题,请参考以下文章