kmp【Template】

来源:互联网 发布:杨紫宁丹琳 知乎 编辑:程序博客网 时间:2024/06/05 16:32
#include<iostream>#include<cstdio>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 pre_kmp(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 nx[10010];int kmp_count(char x[], int m, char y[], int n){    int i, j;    int ans = 0;    kmp_pre(x, m, nx);    i = j = 0;    while (i < n)    {        while (-1 != j&&y[i] != x[j])            j = nx[j];        i++, j++;        if (j >= m)        {            ans++;            j = nx[j];        }    }    return ans;}int main(){    return 0;}
原创粉丝点击