LeetCode 044 萬用字元匹配

2021-09-21 07:12:55 字數 981 閱讀 7875

044 萬用字元匹配

題目:給定乙個字串 (s) 和乙個字元模式 § ,實現乙個支援 『?』 和 『*』 的萬用字元匹配。

'?' 可以匹配任何單個字元。

'*' 可以匹配任意字串(包括空字串)。

兩個字串完全匹配才算匹配成功。

說明:s 可能為空,且只包含從 a-z 的小寫字母。

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

方法:動態規劃

如何發現是動態規劃的呢?

因為此題符合重疊子結構,就是說我們假設乙個dp二維boolean陣列,當dp[i][j]==true,表示s的前i位匹配p的前j位。

所以可以轉換為判斷後者能否匹配可以先判斷前面是否匹配,如果匹配還要滿足什麼條件才能讓後者匹配

於是可以分成三種情況:

(1)如果p.charat(j)==普通字元,dp[i + 1][j + 1] = dp[i][j]&&s.charat(i) == p.charat(j)

(2)如果p.charat(j)=='?',dp[i + 1][j + 1] = dp[i][j]

(3)如果p.charat(j)=='*',

i:如果*要抵消空字元,則dp[i + 1][j + 1] = dp[i+1][j]

ii:如果*要抵消第i+1位字元,dp[i + 1][j + 1] = dp[i][j+1]

於是**如下:

public boolean ismatch(string s, string p) 

}// 開始動態規劃

for (int i = 0; i < s.length(); i++)else if (p.charat(j) == '?' || s.charat(i) == p.charat(j))}}

return dp[s.length()][p.length()];

}

LeetCode 044 萬用字元匹配

給定乙個字串 s 和乙個字元模式 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a 輸出...

bzoj3507 Cqoi2014 萬用字元匹配

我們將題目輸入的那個含萬用字元的串,記為 萬用字元串 下面的檔名記為 檔名 檔名 數量很少可以依次查詢。我們先將 萬用字元串 以 為界,將 萬用字元串 分解,得到若干子串,記為 通配子串 我們將每個 通配子串 各建立乙個 ac自動機。而有的 通配子串 可能含 萬用字元,我們將再次按 為界,分解這個 ...

BZOJ3507 Cqoi2014 萬用字元匹配

必須要記住字串很好卡一不小心就o n 別問我為什麼這麼說.qaq 這題首先滿足位數與字母兩個限制,那麼我們 分大塊?分小塊,求各塊hash值,同時預處理出來每個字串的字首hash這樣就可以o 1 對比了 千萬不要忘記hash字串對比的功能,我在考試的時候一腦抽就忘了.include include ...