代码改变世界

KMP算法

  宋海宾  阅读(11)  评论(0编辑  收藏  举报
复制代码
复制代码
复制代码
#include <iostream>

using namespace std;


int *getNext(string pattern){
    int len = pattern.length();
    int *mnext= (int *)malloc(sizeof(int)* len);

    if( mnext == NULL ){
        return NULL;
    }

    mnext[0] = -1;

    int j = -1;
    for( int i = 1; i < len; i++ ){

        while(j != -1 && pattern[ j + 1 ] != pattern[i]){
            j = mnext[j];
        }

        if(pattern[j + 1] == pattern[i]){
            j++;
        }

        mnext[i]= j;
    }

    return mnext;

}

int kmpsearch(string texts, string pattern){
    int j;

    int *mnext = getNext(pattern);
    if(mnext == NULL){
        return -1;
    }

    j = 0;
    for (int i = 0; i < texts.length(); i++){

        while( j > 0 && pattern[j] != texts[i]){
            j = mnext[j -1] + 1;
        }

        if(pattern[j] == texts[i]){
            j++;
        }

        if(j == pattern.length() - 1){
            return i - j + 1;
        }
    }

    return -1;

}
int main(){
    int i;
    i = kmpsearch("abababc", "baba");

    cout<<i<<endl;
    return 0;
}
复制代码

 

复制代码
复制代码

 

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示