KMP算法模板

对于以字符数组输入的字符串进行kmp算法的匹配代码:

下标从1开始(对于匹配不成功的字符串,用0进行标记)

void Get_Next(){
    nxt[1]=0;
    int j=0;
    for(int i=2;i<=m;i++){  //m为匹配串的长度 
        while(j>0&&pattern[i]!=pattern[j+1])  j=nxt[j];
        if(pattern[i]==pattern[j+1])  j++;
        nxt[i]=j;
    }
}
bool KMP(char text[],char pattern[]){
    int n=strlen(text+1),m=strlen(pattern+1);
    Get_Next();
    int j=0;
    for(int i=1;i<=n;i++){
        while(j>0&&(text[i]!=pattern[j+1]||j==n)) j=nxt[j];
        if(text[i]==pattern[j+1])  j++;
        f[i]=j;  //f数组是用来记录文本串的匹配情况 
        if(f[i]==m)  return true;
    }
    return false;
}

对于以string字符串输入的字符串进行kmp算法匹配的代码:

下标从0开始(对于匹配不成功的字符串,用-1进行标记)

void Get_Next(){
    int j=-1;
    nxt[0]=-1;
    for(int i=1;i<n;i++){
        while(j!=-1&&pattern[i]!=pattern[j+1])  j=nxt[j];
        if(pattern[i]==pattern[j+1])  j++;
        nxt[i]=j;
    }
}
bool KMP(string text,string pattern){
    int n=text.size(),m=pattern.size();
    Get_Next();
    int j=-1;
    for(int i=0;i<n;i++){
        while(j!=-1&&text[i]!=pattern[j+1]) j=nxt[j];
        if(text[i]==pattern[j+1])  j++;
        if(j==m-1)  return true;
    }
    return false;
}
全部评论

相关推荐

炫哥_:为什么都读硕士了?项目还是网上的项目(真心发问)
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务