【模式串个数匹配】+ KMP

来源:互联网 发布:win8开始菜单软件 编辑:程序博客网 时间:2024/05/21 21:40

实现代码 :

#include<iostream>#include<cstring>using namespace std;typedef struct{    int l;    char c[100];}node;int nx[100];void pz(node &p,char *s){    if(strlen(s) > 100) return ;    p.l = strlen(s);    for(int i = 0 ; i < p.l; i++)        p.c[i] = *(s + i);}void qn(node p){    nx[1] = 0;    for(int i = 1,j = 0; i < p.l; i++){        j = nx[i];        while(j && p.c[i] != p.c[j]) j = nx[j];        nx[i + 1] = p.c[i] == p.c[j] ? j + 1 : 0;    }}int kmp(node a,node b,int pl){    for(int i = pl,j = 0; i < b.l; i++){        while(j && a.c[j] != b.c[i]) j = nx[j];        if(a.c[j] == b.c[i]) j++;        if(j == 3) return i + 1;    }    return 0;}int main(){    node s;    pz(s,"bbaaabbababba");    node T;    qn(s);    pz(T,"abb") ;    int num = 0,pl = 0;    while(s.l - pl >= T.l){        pl = kmp(T,s,pl);        if(!pl) break;        num++;    }    cout << num << endl;    return 0;}
0 0
原创粉丝点击