给定一个s字符串和一个n字符串在s字符串中找出n字符串出现的第一个位置从0开始。如果不存在则返回 -1需要给出多个测试用例证明算法的正确性kmp代码
以下是KMP算法的Python实现:
def kmp(s, n):
m, i, j = len(s), 0, 0
nxt = get_next(n)
while i < m and j < len(n):
if j == -1 or s[i] == n[j]:
i, j = i+1, j+1
else:
j = nxt[j]
if j == len(n):
return i - j
else:
return -1
def get_next(n):
nxt = [-1] * len(n)
i, j = 0, -1
while i < len(n) - 1:
if j == -1 or n[i] == n[j]:
i, j = i+1, j+1
nxt[i] = j
else:
j = nxt[j]
return nxt
下面是一些测试用例:
assert kmp("hello, world", "world") == 7
assert kmp("mississippi", "issip") == 4
assert kmp("abcdefg", "xyz") == -1
assert kmp("abcabcabc", "abc") == 0
assert kmp("abcabcabc", "bcd") == -1
``
原文地址: http://www.cveoy.top/t/topic/fJtv 著作权归作者所有。请勿转载和采集!