码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法

时间:2017-05-26 00:38:59      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:mp算法   base   return   htm   ==   logs   style   void   ret   

看了半天理解了思想,但是还是看不懂代码。下面这篇写的不错,推荐一下。

http://www.tuicool.com/articles/e2Qbyyf

 

怎样得到 next 函数

相当于字符串 T 自身做一次匹配。(下标从 1 开始)

void getnext() {
    next[1] = 0;
    for(int i = 2; i <= n; i++) {
        int j = next[i - 1];
        while(t[j + 1] != t[i] && j > 0) {
            j = next[j];
        }
        if(t[j + 1] == t[i]) {
            next[i] = j + 1;
        } else {
            next[i] = 0;
        }
    }
}

模式匹配

字符串 S 与字符串 T 做一次匹配。

int kmp() {
    int j = 0;
    for(int i = 1; i <= m; i++){
        while(t[j + 1] != s[i] && j > 0) {
            j = next[j];
        }
        if(t[j + 1] == s[i]) {
            j++;
        }
        if(j >= n) {
            return i - n + 1;
        }
    }
    return 0;
}

 

总的时间复杂度是 O(N+M) 即线性的。

KMP算法

标签:mp算法   base   return   htm   ==   logs   style   void   ret   

原文地址:http://www.cnblogs.com/wangkaipeng/p/6906501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!