字串萬用字元匹配 leetcode44 go

2021-10-11 11:31:00 字數 1412 閱讀 3824

給定乙個字串 (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 = "*a*b" 輸出: true

解釋: 第乙個 '*' 可以匹配空字串, 第二個 '*' 可以匹配字串 "dce".

示例 5:輸入:s = "acdcb" p = "a*c?b" 輸出: false

1、動態規劃;時間複雜度o(n^2),空間複雜度o(n^2)

func ismatch(s string, p string) bool dp[0][0] = truefor i := 1; i <= m; i++  else }for i := 1; i <= n; i++  else if p[j-1] == '?' || s[i-1] == p[j-1] }}return dp[n][m]}
2、遞迴;時間複雜度o(n^2),空間複雜度o(n^2)

var dp intfunc ismatch(s string, p string) bool return dfs(s, p, 0, 0)}func dfs(s, p string, i, j int) bool if dp[i][j] > 0  else }if i >= len(s) if j >= len(p) res := falseif p[j] == '*'  else if res == true  else return res}
3、貪心;時間複雜度o(n^2),空間複雜度o(1)

func ismatch(s string, p string) bool  else if j < len(p) && p[j] == '*'  else if start != 0  else }for ; j < len(p) && p[j] == '*'; j++ {}return j == len(p)}
hard題目,多種解

字串萬用字元

問題描述 在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋 資料庫 正規表示式等領域。現要求各位實現字串萬用字元的演算法。要求 實現如下2個萬用字元 匹配0個或以上的字元 字元由英文本母和數字0 9組成,不區分大小寫。下同 匹配1個字元 輸入 萬用字元表示式 一組字串。輸出 返回匹配的結果,正確...

字串萬用字元 ACM

問題描述 在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋 資料庫 正規表示式等領域。現要求各位實現字串萬用字元的演算法。要求 實現如下2個萬用字元 匹配0個或以上的字元 字元由英文本母和數字0 9組成,不區分大小寫。下同 匹配1個字元 輸入 萬用字元表示式 一組字串。輸出 返回匹配的結果,正確...

字串萬用字元 C

題目描述 問題描述 在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋 資料庫 正規表示式等領域。現要求各位實現字串萬用字元的演算法。要求 實現如下2個萬用字元 匹配0個或以上的字元 字元由英文本母和數字0 9組成,不區分大小寫。下同 匹配1個字元 輸入 萬用字元表示式 一組字串。輸出 返回匹配的...