kmp 算法字符串匹配, kmp算法的时间复杂度是O(m+n), 复杂的地方是计算next数组,用动态规划的方式计算next数组
def kmp(m_str, p_str):
m = len(m_str)
n = len(p_str)
j = 0
next_list = getNext(p_str)
print(next_list)
for i in range(m):
while j > 0 and m_str[i] != p_str[j]:
j = next_list[j-1] + 1
if m_str[i] == p_str[j]:
j += 1
if j == n:
return i - n + 1
return -1
def getNext(p_str):
n = len(p_str)
k = -1
next_list = [-1] * n
for j in range(1, n):
while k != -1 and p_str[k+1] != p_str[j]:
k = next_list[k]
if p_str[k+1] == p_str[j]:
k += 1
next_list[j] = k
return next_list
test_kmp = kmp('1yhfcn12314', '1231')
print(test_kmp)