LeetCode-python 44.通配符匹配

題目鏈接
難度:困難 ??????類型: 動態(tài)規(guī)劃


給定一個字符串 (s) 和一個字符模式 (p) ,實現一個支持 '?' 和 '*' 的通配符匹配。

'?' 可以匹配任何單個字符。
'*' 可以匹配任意字符串(包括空字符串)。
兩個字符串完全匹配才算匹配成功。

說明:
s 可能為空,且只包含從 a-z 的小寫字母。
p 可能為空,且只包含從 a-z 的小寫字母,以及字符 ? 和 *。

示例1

輸入:
s = "aa"
p = "a"
輸出: false
解釋: "a" 無法匹配 "aa" 整個字符串。

示例2

輸入:
s = "aa"
p = ""
輸出: true
解釋: '
' 可以匹配任意字符串。

示例3

輸入:
s = "cb"
p = "?a"
輸出: false
解釋: '?' 可以匹配 'c', 但第二個 'a' 無法匹配 'b'。

示例4

輸入:
s = "adceb"
p = "ab"
輸出: true
解釋: 第一個 '' 可以匹配空字符串, 第二個 '' 可以匹配字符串 "dce".

示例5

輸入:
s = "acdcb"
p = "a*c?b"
輸入: false

解題思路


狀態(tài)轉移方程:
如果p[i] == s[j] 或 p[i]=='?': dp[i+1][j+1] = dp[i][j]
如果 p[i] == '*': dp[i+1][j+1] = dp[i+1][j] or dp[i][j+1]

dp的第一列要特殊處理,針對首字符為‘*’的情況

代碼實現

class Solution(object):
    def isMatch(self, s, p):
        """
        :type s: str
        :type p: str
        :rtype: bool
        """
        m, n = len(s), len(p)
        dp = [[False] * (m+1) for _ in range(n+1)]
        dp[0][0] = True
        for i in range(n):
            if p[i] == '*':
                dp[i+1][0] = dp[i][0]
        for i in range(n):
            for j in range(m):
                if p[i] == s[j] or p[i]=='?':
                    dp[i+1][j+1] = dp[i][j]
                elif p[i] == '*':
                    dp[i+1][j+1] = dp[i+1][j] or dp[i][j+1]  
              
        return dp[-1][-1]

本文鏈接:http://www.itdecent.cn/p/882edd9a1c13

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,069評論 0 2
  • 題目 (困難)給定一個字符串 (s) 和一個字符模式 (p)。實現支持 '.' 和 '*' 的正則表達式匹配。 '...
    玖月晴閱讀 837評論 0 0
  • 題目描述: 給定一個字符串 (s) 和一個字符模式 (p) ,實現一個支持 '?' 和 '*' 的通配符匹配。 '...
    huxinwen閱讀 791評論 0 1
  • 早晨,看完迷失東京。 斯嘉麗和比爾相遇在東京。一個是剛畢業(yè)的大學生,進入婚姻,生活失去了方向…… 一個是家庭事業(yè)雙...
    林琳瑯設計閱讀 403評論 0 0
  • 前天晚上和男友去看的,阿湯哥一如既往地帥,妹子依然很漂亮,不過里面最讓人覺得驚艷的,絕對是白寡婦,人美,聲音又磁性...
    走邊關的蒲公英閱讀 544評論 10 0

友情鏈接更多精彩內容