kmp算法模板

来源:互联网 发布:数据流程图 编辑:程序博客网 时间:2024/06/15 20:01
#include<iostream>#include<algorithm>#include<cstring>using namespace std;void getNext(char *s,int *next){    int i=0,j=-1,len=strlen(s);    next[0]=-1;    while(i<len){        if(j==-1||s[i]==s[j])            next[++i]=++j;        else j=next[j];    }}int kmp_Index(char *s1,char *s2,int *next){///获得字符串s2在s1中首次出现的位置    int l1=strlen(s1),l2=strlen(s2);    int i=0,j=0;    while(i<l1&&j<l2){        if(j==-1||s1[i]==s2[j])            i++,j++;        else j=next[j];    }    if(j==l2)        return i-j+1;    return -1;}int kmp_Count(char *s1,char *s2,int *next){///获得字符串s2在s1中出现的次数    int i=0,j=0,ans=0,l1=strlen(s1),l2=strlen(s2);    while(i<l1){        if(j==-1||s1[i]==s2[j])            i++,j++;        else j=next[j];        if(j==l2)            ans++,j=0;    }    return ans;}int main(){    char str[10],str1[10];    int next[10];    cin>>str>>str1;    getNext(str1,next);    ///for(int i=0;i<strlen(str1);i++)        ///cout<<next[i]<<" ";    cout<<kmp_Index(str,str1,next)<<endl;    cout<<kmp_Count(str,str1,next)<<endl;}

原创粉丝点击