【leetcode】字符串匹配

本文深入探讨了KMP算法的实现原理与应用,详细解释了如何通过动态规划构建KMP算法的查找表,并提供了具体的Python代码实现。此外,文章还介绍了如何利用KMP算法解决字符串匹配问题,包括在目标字符串中查找模式字符串的起始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KMP算法

https://leetcode-cn.com/problems/implement-strstr/submissions/
返回p中匹配s的子串的起始位置

def KMP(pattern):
    M = len(pattern)    
    dp = [[0 for i in range(26)] for j in range(M)]
    dp[0][ord(pattern[0])-ord('a')] = 1
    k = 0
    for j in range(1, M):
        for i in range(26):
            dp[j][i] = dp[k][i]
        dp[j][ord(pattern[j])-ord('a')] = j + 1
        k = dp[k][ord(pattern[j])-ord('a')]
    return dp

def search(s, p): # p中是否存在s的子串
    M, N, j = len(s), len(p), 0
    if(M + N == 0 or M == 0):
        return 0
    d = KMP(s)
    for i in range(N):
        j = d[j][ord(p[i])-ord('a')]
        if(j == M):
            return i - M + 1
    return -1

print(search("ab", "cabc")) # 返回开始匹配的位置1

正则项匹配

代码提交:https://leetcode-cn.com/problems/regular-expression-matching/
动态规划解答未搞明白:
调包大侠:import re

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        import re
        if p == '':
            if not s:
                return True
            return False
        return re.match('^'+p+'$', s)

编辑距离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值