【leetcode】字符串匹配

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)

编辑距离

发布了178 篇原创文章 · 获赞 30 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ACBattle/article/details/102788811