码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法模板

时间:2015-08-07 00:23:40      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

代码:

#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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

KMP算法模板

标签:

原文地址:http://blog.csdn.net/mengxingyuanlove/article/details/47325955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!