力扣之通配符匹配——44

问题

力扣之通配符匹配——44_第1张图片
力扣之通配符匹配——44_第2张图片
力扣之通配符匹配——44_第3张图片

解答

与力扣之正则表达式匹配——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]

调试结果:力扣之通配符匹配——44_第4张图片

你可能感兴趣的:(算法,python,leetcode)