如何使用kmp算法实现
时间: 2024-06-13 10:06:39 浏览: 79
KMP算法是一种字符串匹配算法,可以在一个文本串S内查找一个模式串P的出现位置。下面是使用KMP算法实现字符串匹配的Python代码示例:
```python
def kmp_match(s, p):
m, n = len(s), len(p)
cur = 0 # 当前主串S中待匹配字符下标
table = partial_table(p) # 计算模式串P的部分匹配表
while cur <= m - n:
for i in range(n):
if s[i + cur] != p[i]:
cur += max(i - table[i - 1], 1) # 移动位数 = 已匹配的字符数 - 对应的部分匹配值
break
else:
return cur
return -1
def partial_table(p):
n = len(p)
table = [0] * n
prefix, suffix = 0, 1
while suffix < n:
if p[suffix] == p[prefix]:
prefix += 1
table[suffix] = prefix
suffix += 1
elif prefix > 0:
prefix = table[prefix - 1]
else:
suffix += 1
return table
```
其中,`kmp_match`函数接受两个参数,分别是主串S和模式串P,返回模式串在主串中的起始位置,如果没有匹配成功则返回-1。`partial_table`函数用于计算模式串的部分匹配表。
阅读全文