栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

KMP

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

KMP


kmp

void getnx(string str,int *nx)

{

int len=str.length();int i=0,k=-1;nx[0]=-1;

while(i

}

int index(string str,string p)

{

int i=0,j=0;int len1=str.length(),len2=p.length();

if(len1==1&&len2==1)if(str[0]==p[0])return 0;else return -1;

int nx[N];getnx(p,nx);

while(i

if(j==-1||str[i]==p[j])i++,j++;else j=nx[j];

if(j==len2)return i-len2;else return -1;

}

int Count(string str,string p)

{

int ans=0,i=0,j=0;int nx[N];

int len1=str.length(),len2=p.length();

if(len1==1&&len2==1)if(str[0]==p[0])return 1;else return 0;

getnx(p,nx);

for(i=0;i

{

    while(j>0&&str[i]!=p[j])j=nx[j];

    if(str[i]==p[j])j++;

    if(j==len2)ans++,j=nx[len2];

}

return ans;

}

exkmp

#include

#include

#include

#include

using namespace std;

const int maxn=50001;

int nxt[maxn],ex[maxn];

void GETNEXT(char *str)

{

int i=0,j,po,len=strlen(str);

nxt[0]=len;

while(str[i]==str[i+1]&&i+1

i++;

nxt[1]=i;

po=1;

for(i=2;i

{

    if(nxt[i-po]+i

    nxt[i]=nxt[i-po];

    else

    {

        j=nxt[po]+po-i;

        if(j<0)j=0;

        while(i+j

        j++;

        nxt[i]=j;

        po=i;

    }

}

}

void EXKMP(char *s1,char *s2)

{

int i=0,j,po,len=strlen(s1),l2=strlen(s2);

GETNEXT(s2);

while(s1[i]==s2[i]&&i

i++;

ex[0]=i;

po=0;

for(i=1;i

{

    if(nxt[i-po]+i

    ex[i]=nxt[i-po];

    else

    {

        j=ex[po]+po-i;

        if(j<0)j=0;

        while(i+j

        j++;

        ex[i]=j;

        po=i;

    }

}

}

©著作权归作者所有:来自51CTO博客作者qinXpeng的原创作品,如需转载,请注明出处,否则将追究法律责任


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号