python的kmp
时间: 2023-08-27 11:20:23 浏览: 53
KMP算法是一种字符串匹配算法,用于在一个目标串中查找一个模式串的出现位置。该算法利用了模式串自身的特性,通过构造一个pnext列表来实现高效的匹配过程。在Python中,可以使用以下代码实现KMP算法:
```python
def gen_pnext(p):
i, k, m = 0, -1, len(p)
pnext = [-1 * m
while i < m - 1:
if k == -1 or p[i == p[k]:
i, k = i + 1, k + 1
pnext[i = k
else:
k = pnext[k]
return pnext
def matching_KMP(t, p, pnext):
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 j - i
return -1
# 测试
t = "abbcabcaabbcaa" # 目标串
p = "abbcaa" # 模式串
pnext = gen_pnext(p)
result = matching_KMP(t, p, pnext)
print(result)
```
以上代码中,`gen_pnext()`函数用于生成pnext列表,`matching_KMP()`函数用于执行KMP匹配过程。给定一个目标串t和一个模式串p,可以使用以上代码来查找模式串在目标串中的出现位置。在上述示例中,模式串"abbcaa"在目标串"abbcabcaabbcaa"中的出现位置是8。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [KMP算法(python)](https://download.csdn.net/download/weixin_38618540/14854290)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [KMP算法详解(python实现)](https://blog.csdn.net/m0_52573426/article/details/122325379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]