[python] kmp算法实现和测试

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 ==

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值