问题
解答
与力扣之正则表达式匹配——10类似。
动态规划算法
首先初始化状态方程,然后分两种情况讨论来确定 dp[i][j]
。
1.p[j-1]=='*'
dp[i][j]=dp[i-1][j] or dp[i][j-1]
2.p[j-1] in ('?',s[i-1])
dp[i][j]=dp[i-1][j-1]
时间复杂度: O(TP)
T 和 P 分别表示匹配串和模式串的长度。
class Solution:
def isMatch(self, s: str, p: str) -> bool:
dp=[[False for x in range(len(p)+1)] for x in range(len(s)+1)]
dp[0][0]=True
for j in range(1,len(p)+1):
dp[0][j]=bool(dp[0][j-1] and p[j-1]=='*')
for i in range(1,len(s)+1):
for j in range(1,len(p)+1):
if p[j-1]=='*':
dp[i][j]=dp[i-1][j] or dp[i][j-1]
elif p[j-1] in ('?',s[i-1]):
dp[i][j]=dp[i-1][j-1]
return dp[-1][-1]
调试结果: