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

被折叠的 条评论
为什么被折叠?



