俺做過這題,這是乙個線性dp題,線性dp就是子問題是單向的 (意會一下,區間dp是雙向)
這個問題就是求字串能否可以正確匹配,如果乙個串要與某段字串匹配上,那麼它肯定前面匹配上了,然後現在這個位置也匹配上了,
由於有*的存在,所以涉及到狀態回溯,
* 可以匹配1個或者多個或者乙個也不匹配。
乙個都不匹配又分為兩種情況,
一種是確實匹配不上,
另一種就是可以不匹配.
如果是因為匹配不上而不匹配,則當前的狀態則於兩個字元前一致。
另一種可以匹配,三種情況有一種可以匹配上,那就算能匹配上。
(動態規劃的狀態儲存給了反悔的的機會嘛)
dp陣列定義:
dp[i][j]:到達s串i位置和匹配串j位置時的匹配情況
轉移方程:
ifs[i]==p[j]||p[j] ==』.』 dp[i][j] = dp[i-1][j-1]
else p[j] ==』*』
if s[i]!=p[j-1]&&p[j]!=』.』 dp[i][j] = dp[i][j-2]
else dp[i][j] = dp[i-1][j]||dp[i][j-1]||dp[i][j-2];
初始化為:
當在初始位置兩邊都為空字元
空串匹配空串肯定行。空串匹配含字串的串肯定不行。含字元的串匹配空串,如果前面都是字元 *的形式那就行。
class
solution
else
if(ps[j -1]
=='*'
)else}}
);})
;return dp[cs.length]
[ps.length];}
}
鍊錶高頻演算法題
class solutionif l2 listnode dummy new listnode listnode res dummy res next null while l1 l2 else if l1 if l2 return dummy next class solution listnod...
每日演算法 動規高頻題 3
1 target 目標位置 10000 啊那個r僅僅是轉向還有剎車的意思,並不一樣要後開乙個位置,俺就是看著結果莫名其妙的。能夠直接到達的位置是2n 1這種型別的位置,如果無法到達就有兩種清空。1.開過了,得倒回來,這種情況比較簡單,只需加上開到過了的那個位置的運算元 n 開回來的次數 2n 1 x...
演算法 動態規劃(1)
把問題拆分成若干個子問題,類似遞迴 分治 但是動規多用於處理最優解,有重疊子問題的問題,因為動態規劃對於重疊子問題不會反覆計算,會建立一張表將之前計算過的子問題答案直接儲存,避免了重複計算,加快計算速度 練習1 有8個任務,每個任務完成需要一定的時間,完成之後就會有相應的報酬 圖上的紅色字段 但是任...