标签: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
标签:class res blog and abc python 理解 get usr
原文地址:http://www.cnblogs.com/cmhco/p/7992909.html