理論部分可以參照這篇文章:字串匹配的kmp演算法
或者英文版的:jake boxer-the knuth-morris-pratt algorithm in my own words
下面根據以上的介紹,用python實現的kmp演算法(有不對的地方,還望指正)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def getone(substr):
length = len(substr)
max = 0
j = length-1
for index in range(length-1):
if substr[:index+1] == substr[j:]:
max = max(max,index+1)
j -= 1
return max
def buildtable(substr):
length = len(substr)
table =
for index in range(length):
v = getone(substr[:index+1])
return table
def kmp(string,substr):
t = buildtable(substr)
j = 0
for i in range(len(string)):
if j>=len(substr):
return i-len(substr)
if string[i] == substr[j]:
j += 1
continue
if j>0:
nextp = j-t[j-1]
j = nextp
return -1
python的KMP演算法實現
演算法的複雜度為o n def matching kmp t,p,pnext kmp串匹配,主函式 j,i 0,0 n,m len t len p while j n and i m if i 1 or t j p i j,i j 1,i 1 else i pnext i if i m return...
KMP演算法(Python實現)
關於kmp演算法的原理等請參閱這篇文章 kmp演算法 c 實現 本篇文章只是對kmp用python進行了實現。1.時間複雜度分析 bf演算法的時間複雜度 在最壞的情況下,bf演算法要將目標串的每乙個字元同模式串進行比較一遍,假定目標串長度為m,模式串長度為n,總的時間複雜度為o m n 而對於kmp...
KMP演算法python實現
目錄 一 找出prefix table 二 kmp演算法實現 二 測試 三 結果 四 時間複雜度簡單匹配演算法的時間複雜度為o m n kmp匹配演算法時間複雜度為o m n 1 把要匹配的字串pattern拆成子串找出最大公共前字尾,原來的要匹配的字串列入為求最大公共前字尾的行列裡面。最大公共前字...