写一个基于Boyer-Moore算法的字符串子串查找匹配函数
时间: 2024-11-05 09:26:38 浏览: 25
Boyer-Moore算法是一种高效的字符串匹配算法,它通过跳过尽可能多的字符来加速搜索过程。该算法主要利用两个启发式规则:坏字符规则和好后缀规则。
下面是一个基于Boyer-Moore算法的字符串子串查找匹配函数的Python实现:
```python
def boyer_moore(text, pattern):
m = len(pattern)
n = len(text)
if m > n:
return -1
# 构建坏字符表
bad_char = [-1] * 256
for i in range(m):
bad_char[ord(pattern[i])] = i
s = 0 # s是模式相对于文本的位移
while s <= n - m:
j = m - 1
while j >= 0 and pattern[j] == text[s + j]:
j -= 1
if j < 0:
return s # 找到匹配,返回起始索引
else:
s += max(1, j - bad_char[ord(text[s + j])])
return -1 # 未找到匹配
# 示例使用
text = "这里有一个简单例子"
pattern = "简单"
result = boyer_moore(text, pattern)
print("匹配位置:", result)
```
这个函数首先检查模式长度是否大于文本长度,如果是,则直接返回-1表示没有匹配。然后,它创建一个坏字符表来记录每个字符在模式中最右的位置。接着,函数使用一个循环来遍历文本,每次比较模式与当前文本窗口的字符。如果发现不匹配的字符,根据坏字符规则移动模式的位置。如果整个模式都匹配了,就返回当前的起始索引。如果遍历完文本都没有找到匹配,则返回-1。
阅读全文