# 朴素方式的字符匹配
t = "ababcabcacbab"
t1 = "abbcabcaabbcaa"
p = "abcac"
# 朴素字符串匹配算法
def function1(t, p):
n, m = len(t), len(p)
i, j = 0, 0
while i < n:
if t[i] == p[j]:
i, j = i + 1, j + 1
else:
i, j = i - j + 1, 0
if j == m:
return i - m
return -1
# KMP算法-------关于KMP算法,等周末将理论补充
def function2(t, p):
pnext = make_pnext(p)
print("模式字符串的前后缀链表为:", pnext)
m, n = len(p), len(t)
i, j = 0, 0
while i < n:
if j == -1 or t[i] == p[j]:
i, j = i + 1, j + 1
else:
j = pnext[j]
if j == m:
return i - m
return -1
def make_pnext(t):
pnext = [-1] * len(t)
k, i, n = -1, 0, len(t)
while i < n - 1:
if k == -1 or t[k] == t[i]:
k, i = k + 1, i + 1
if t[k] == t[i]:
pnext[i] = pnext[k]
else:
pnext[i] = k
else:
k = pnext[k]
return pnext
print(function2(t, p))
字符串匹配---KMP算法
最新推荐文章于 2022-10-23 22:04:20 发布