[python] kmp算法实现和测试

[python] kmp算法实现和测试,第1张

kmp算法实现
class kmp():
    def __init__(self, mStr, subStr):
        self.mStr = mStr
        self.subStr = subStr
    
    def get_next(self, loc) -> int:
        k = 0
        while k < loc and self.subStr[0:k + 1] == self.subStr[loc-k-1:loc]:
            k += 1
        return k
    
    def isin_mStr(self) -> bool:
        lens = len(self.mStr)
        slens = len(self.subStr)
        i = j = 0
        while i < lens:
            while j < slens and i < lens and self.subStr[j] == self.mStr[i]:
                j += 1
                i += 1
            if j == slens:
                return True
            elif j == 0:
                i += 1
            else:
                j = self.get_next(j)
        return False
测试
from kmp import kmp
import pytest

testlist = [
    ("abc","ab",True),
    ("a","b", False),
    ("abcdabcdef","abcdefg",False)
]
@pytest.mark.parametrize("nstr, substr, result", testlist)
def test_kmp(nstr, substr,result):
    assert kmp(nstr,substr).isin_mStr() == result

collected 3 items

test_kmp.py ...                                                                               [100%] 

== 3 passed in 0.04s ==

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/714356.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-24
下一篇2022-04-24

发表评论

登录后才能评论

评论列表(0条)

    保存