以下是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
``
给定一个s字符串和一个n字符串在s字符串中找出n字符串出现的第一个位置从0开始。如果不存在则返回 -1需要给出多个测试用例证明算法的正确性kmp代码

原文地址: http://www.cveoy.top/t/topic/fJtv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录