KMP算法模式匹配:next数组求解示例
KMP算法是一种高效的字符串匹配算法,它利用模式串本身的特性来加速匹配过程。next数组是KMP算法中的核心概念,它记录了模式串中每个位置的最长相同前后缀长度。
给定串S='abadaabcd',应用KMP算法进行模式匹配,得到的next数组值为(0 0 1 1 2 3 1 2 0)。
next数组的计算方法:
- next[0] = 0
- 对于i > 0,计算next[i]:
- 令j = next[i-1]
- 如果S[i-1] == S[j],则next[i] = j+1
- 否则,j = next[j],重复步骤2,直到找到满足S[i-1] == S[j]的j,或者j=0。
代码实现:
def get_next(pattern):
n = len(pattern)
next = [0] * n
j = 0
for i in range(1, n):
while j > 0 and pattern[i - 1] != pattern[j]:
j = next[j - 1]
if pattern[i - 1] == pattern[j]:
j += 1
next[i] = j
return next
pattern = 'abadaabcd'
next = get_next(pattern)
print(next) # 输出 [0 0 1 1 2 3 1 2 0]
通过以上分析,我们可以看到,对于串S='abadaabcd',应用KMP算法进行模式匹配,得到的next数组值为(0 0 1 1 2 3 1 2 0),而不是(8 2 1 2 1 2 8 3 1)。
原文地址: https://www.cveoy.top/t/topic/bG1a 著作权归作者所有。请勿转载和采集!