每日演算法 動態規劃高頻題 1 正規表示式

2021-10-06 11:53:48 字數 962 閱讀 5306

俺做過這題,這是乙個線性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個任務,每個任務完成需要一定的時間,完成之後就會有相應的報酬 圖上的紅色字段 但是任...