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)