数据结构中请实现使用KMP(Knuth-Morris-Pratt)算法在 text 中查找 pattern 的出现的位置。 例如: text= "ababcabcacbab";
时间: 2024-09-30 19:10:18 浏览: 31
KMP算法,也称为Knuth-Morris-Pratt匹配算法,是一种用于高效字符串搜索的动态规划方法。它的核心思想是在模式串中预处理出部分匹配表(Partial Match Table,简称PMT),以便在文本串中快速跳过已经匹配的部分,避免无效的比较。
以下是使用Python实现KMP算法来查找给定模式在文本中位置的例子:
```python
def build_PMT(pattern):
PMT = [0] * len(pattern)
j = 0
for i in range(1, len(pattern)):
while j > 0 and pattern[i] != pattern[j]:
j = PMT[j - 1]
if pattern[i] == pattern[j]:
j += 1
PMT[i] = j
return PMT
def KMP_search(text, pattern):
PMT = build_PMT(pattern)
n, m = len(text), len(pattern)
i, j = 0, 0
positions = []
while i < n:
if text[i] == pattern[j]:
i += 1
j += 1
elif j > 0:
j = PMT[j - 1]
else:
i += 1
if j == m:
positions.append(i - m) # 如果找到一个匹配,记录起始位置并回溯
j = PMT[j - 1]
return positions
# 使用示例
text = "ababcabcacbab"
pattern = "abc"
positions = KMP_search(text, pattern)
print(f"Pattern '{pattern}' found at positions {positions} in the text.")
阅读全文