标签:
代码:
#include <iostream> #define MAXN 10010 using namespace std; void kmp_pre(char x[],int m,int next[]){ int i,j; j=next[0]=-1; i=0; while(i<m){ while(-1!=j&&x[i]!=x[j]) j=next[j]; next[++i]=++j; } } ///效率更高一些 void preKMP(char x[],int m,int kmpNext[]){ int i,j; j=kmpNext[0]=-1; i=0; while(i<m){ while(-1!=j&&x[i]!=x[j]) j=kmpNext[j]; if(x[++i]==x[++j]) kmpNext[i]=kmpNext[j]; else kmpNext[i]=j; } } int next[MAXN]; int KMP_Count(char x[],int m,char y[],int n){ //x是模式串,y是主串 int ans=0; kmp_pre(x,m,next);///预处理得到模式串x的next数组 int i,j; i=j=0; while(i<n){ while(j!=-1 && y[i]!=x[j]) j=next[j];///j==-1表示第一个字符x[0]与y[i]不匹配 i++;j++; if(j>=m){ ans++; j=next[j]; } } return ans; } int main() { cout << "Hello World!" << endl; return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/mengxingyuanlove/article/details/47325955