Untitled
unknown
plain_text
3 years ago
485 B
7
Indexable
def boyer_moore(text, pattern):
n = len(text)
m = len(pattern)
if m == 0:
return 0
last = {}
for i in range(m):
last[pattern[i]] = i
i = m - 1
j = m - 1
while i < n:
if text[i] == pattern[j]:
if j == 0:
return i
else:
i -= 1
j -= 1
else:
lo = last.get(text[i], -1)
i += m - min(j, lo + 1)
j = m - 1
return -1
Editor is loading...