字符串的模式匹配(BF算法,KMP算法)代码实现
时间: 2023-11-18 20:04:27 浏览: 98
1. BF算法(暴力匹配)
BF算法(暴力匹配)是一种朴素的字符串匹配算法,时间复杂度为O(n*m),其中n和m分别为文本串和模式串的长度。
代码如下:
```python
def bf_match(text, pattern):
n, m = len(text), len(pattern)
for i in range(n - m + 1):
j = 0
while j < m and text[i + j] == pattern[j]:
j += 1
if j == m:
return i
return -1
```
2. KMP算法
KMP算法是一种高效的字符串匹配算法,时间复杂度为O(n+m),其中n和m分别为文本串和模式串的长度。
代码如下:
```python
def kmp_match(text, pattern):
n, m = len(text), len(pattern)
# 计算模式串的next数组
next = [0] * m
j = 0
for i in range(1, m):
while j > 0 and pattern[j] != pattern[i]:
j = next[j-1]
if pattern[j] == pattern[i]:
j += 1
next[i] = j
# 匹配文本串和模式串
j = 0
for i in range(n):
while j > 0 and text[i] != pattern[j]:
j = next[j-1]
if text[i] == pattern[j]:
j += 1
if j == m:
return i - m + 1
return -1
```
其中,next数组表示模式串中每个位置之前的最长公共前后缀的长度。在KMP算法中,当模式串和文本串不匹配时,可以利用next数组的值快速跳过一部分已经匹配的字符。
阅读全文