[算法] KMP

之前写的, 又忘了...只剩大概印象了...算法还是常看常新啊...先存着再说...

def getNext(pattern):
    j = 0
    p_len = len(pattern)
    next = [0]
    for i in range(1, p_len):
        while j > 0 and pattern[i] != pattern[j]:
            j = next[j-1]
        if pattern[i] == pattern[j]:
            j = j + 1
        next.append(j)
    return next

def kmp_search(text, pattern, next):
    j = 0
    plen = len(pattern)
    tlen = len(text)

    for i in range(0, tlen):
        while j > 0 and text[i] != pattern[j]:
            j = next[j-1]

        if text[i] == pattern[j] :
            j = j + 1

        if j == plen :
            print("from ", i-j+1, "to ", i)
            j = next[j-1]

text = ("aaaaaaaaaaaaaaaaaaaab")
pattern = ("aaab")

text1 = ("abababababababababa")
pattern1 = ("ababab")

next = getNext(pattern)
print(next)
kmp_search(text, pattern, next)
print(text)
print(pattern)

next1 = getNext(pattern1)
print(next1)
kmp_search(text1, pattern1, next1)
print(text1)
print(pattern1)

[算法] Python 计算出现最多的前100个单词

Python 计算单词数


[算法] 海量日志数据, 提取出某日访问百度次数最多的那个IP

海量日志数据, 提取出某日访问百度次数最多的那个IP


[算法] Python 快速排序

Python 快速排序


[笔记]《编程之美》2.3 寻找发帖“水王”

《编程之美》2.3 寻找发帖“水王”


[算法] Python 计数排序

Python 计数排序


[算法] 求数组的子数组之和的最大值

输入一个整形数组, 数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组, 每个子数组都有一个和. 求所有子数组的和的最大值.