LeetCode115不同的子串行

2022-08-01 05:27:14 字數 1191 閱讀 9423

題目說明在這裡就不貼出來了,相信開啟這篇文章的小夥伴們肯定都是在刷leetcode的。

一開始我的想法是dfs+回溯,結果執行超時,一開始我就覺得可能會超時,結果不出所料【手動笑哭】。

後來我想了下dfs在每一次都需要遍歷,這樣時間複雜度當然高啊。

後來經過了不知道多久的好久,我就學會了使用動態規劃的方法,哎,動態規劃一直是我的弱點所在,邏輯思維能力跟不上!

動態規劃的重點在於找到狀態轉換方程,說是這樣說的,但是我每次都找不到轉換方程啊。。。。哈哈哈哈,無奈大笑!

廢話不多,直接上圖,一圖勝千言!

解釋上圖:各位小夥伴可以發現藍色一行全為1,啥意思尼?因為我們設定dp[t.length+1][s.length+1],多一行

和多一列的目的是我們需要dp的那個初始值1,因為當s為空t為空時

匹配情況為1,然後當t為空隨

s不斷變長其匹配數仍為1。黃色一列同理可得當s為空t不空時沒有可以匹配的。

然後我們通過觀察可以猜出

if(t【i-1】== s【j-1】)dp【i】【j】 = dp【i-1】【j-1】+ dp【i】【j-1】

else dp【i】【j】 = dp【i】【j-1】

else後面的很好理解,例如當 t 取前面乙個字元 「r」 然後依次從前往後去s中找匹配,當 s = 「r」時匹配為1, 當 s = 「ra」

時匹配仍為1,依次類推。

然而,if後面的那個表示式又是什麼意思呢?

如圖,這個例子可以很好的解釋,現在要求最後乙個方框中的值,dp【i】【j】 = dp【i-1】【j-1】+ dp【i】【j-1】

在這裡的解釋就是:在a之前b的個數,有多少個b就可以與a組成多少對匹配,

然後加上當s = 「ba」 s = 「babagc」 時,能夠匹配的ba的數量 

leetcode 115 不同的子串行

思路 動態規劃 狀態定義 f x,y 記t中 0,x 範圍的子串為t 記s中 0,y 範圍的子串為s f x,y 表示在s 中t 出現的個數。狀態轉移 1 對於x 0的情況,a 當y 0時,如果s.charat 0 t.charat 0 則f 0,0 1 否則f 0,0 0。b 當y 0 時,如果s...

leetcode 115 不同的子串行

遞迴超時 唉 設dp i j 表示s 0 i 1 的子串行中t 0 j 1 出現的次數,則 1.若s i 1 t j 1 dp i j dp i 1 j 1 用s i 1 與t j 1 配對 dp i 1 j 拋棄s i 1 不用s i 1 與t j 1 配對 2.若s i 1 t j 1 dp i...

leetcode 115 不同的子串行

給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 示例 1 輸入 s rabbbit t rabbit 輸出 3 解...