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

KMP算法

时间:2017-12-06 16:09:50      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:class   res   blog   and   abc   python   理解   get   usr   

算法原理:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

next数组还不是太理解,代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @time     : 2017/12/5 下午8:19
# @desc     :

def get_next(p):
    next = [0] * len(p)
    next[0] = -1
    i = 0
    k = -1

    while i < len(p)-1:
        if k == -1 or p[i] == p[k]:
            i += 1
            k += 1
            next[i] = k
        else:
            k = next[k]
    return next


def kmp(s, p):
    if len(p) == 0:
        return 0

    next = get_next(p)

    i, j = 0, 0

    while i < len(s) and j < len(p):
        if j == -1 or s[i] == p[j]:
            i += 1
            j += 1
        else:
            j = next[j]

    if j == len(p):
        return i - len(p)
    else:
        return -1


if __name__ == "__main__":
    next = get_next("abcbabca")
    res = kmp("abcdabcdabcde", "abcde")
    print res

  

KMP算法

标签:class   res   blog   and   abc   python   理解   get   usr   

原文地址:http://www.cnblogs.com/cmhco/p/7992909.html

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