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 ...