LeetCode演算法練習之萬用字元匹配

2021-10-04 13:40:18 字數 1225 閱讀 3758

上次的正規表示式匹配就是使用的動態規劃的方法,不過上一次因為寫完程式太晚了,就沒有想自下而上填表法實現的動態規劃。這次就直接使用填表法來解決問題吧。

上次的分析同樣可以套用到這次的問題中。我們使用了乙個二維陣列來儲存每個小問題的答案,現在我們分析一下遞迴過程,就可以得出自下而上的填表法解決方案。

這張圖中,箭頭表示遞迴函式的呼叫順序。想要得到[0,0]處的值,就必須要知道[1,1]的值。

我們也可以模擬程式執行,把從右下角開始填表,把資料都填上。

這樣就有了簡化程式的方法,編寫程式時的思路也由「遞迴」變成了「怎麼填寫這張表」。

但是為了方便,程式設計的時候我們最好還是從頭開始填表,也就是從[0,0]開始,填到表的右下角,表右下角的值就是答案。

編寫填表程式算是求解動態規劃問題的最後一步。在這一步,就要確定所謂的「狀態轉移方程」了。說是「方程」,其實我感覺更應該叫「狀態轉移函式」,因為這是乙個由輸入推出輸出的過程。

這道題中,如果沒有遇見*,就只能由左上走到右下。若左上為t,而且當前字元匹配,那麼當前位置也為t,不然就是f。遇到*時,就要把一行可以填的位置(上面乙個字元向右)全部設定為t,因為*可以匹配任意值,這些填入t的格仔代表了各種不同的匹配方案。

最後,如果可以匹配,那麼右下角的值一定為真,否則就是假。

LeetCode刻意練習30 萬用字元匹配

題目 給定乙個字串 s 和乙個字元模式 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 方法一 遞迴 這道題很容易想到遞...

leetcode。 44 萬用字元匹配

實現乙個支援 和 的萬用字元匹配。匹配任何單個字元。匹配任何數量的字元 包括0個 匹配應覆蓋 整個 輸入字串 而不是部分 這個函式原型為 bool ismatch const char s,const char p 示例 ismatch aa a false ismatch aa aa true i...

LeetCode44 萬用字元匹配

題目描述 給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 思路一 字串p是模式字串,字串s是待匹配字串,使用p對s進行匹配。聯想到編輯距離那道題,使用兩個指標i和j,i指向字串s的第i個字...