Leetcode 115 不同的子串行

2021-10-22 11:58:32 字數 1066 閱讀 2924

leetcode 115.不同的子串行

題目連線

題目:給定乙個字串 s 和乙個字串 t ,計算在 s 的子串行中 t 出現的個數。

字串的乙個 子串行 是指,通過刪除一些(也可以不刪除)字元且不干擾剩餘字元相對位置所組成的新字串。(例如,「ace」 是 「abcde」 的乙個子串行,而 「aec」 不是)

題目資料保證答案符合 32 位帶符號整數範圍。

在這裡插入**片

輸入:s = "rabbbit", t = "rabbit"

輸出:3

解釋:如下圖所示, 有 3 種可以從 s 中得到 "rabbit" 的方案。

(上箭頭符號 ^ 表示選取的字母)

rabbbit

^^^^ ^^

rabbbit

^^ ^^^^

rabbbit

^^^ ^^^

題解在官網,這裡只是個人遇到的問題做個記錄

q1:為什麼在dp[0][0]時就是答案?

a1:題解有一句很關鍵的話:

建立二維陣列 dp,其中 dp[i][j] 表示在 s[i:] 的子串行中 t[j:] 出現的個數。

上述表示中,s[i:] 表示 s 從下標 ii 到末尾的子字串,t[j:] 表示 t 從下標 j 到末尾的子字串。

所以當i=0,j=0時,意味著從s的首字元s[0]到末尾字元s[m-1]的子串行中t[0]到t[n-1](即字串t)出現的個數。

q2:為什麼s[i]與t[j]相等時考慮兩個方面?s[i]=t[j]但是不匹配是什麼意思?

a2:當相等的時候,需要判斷每個t中的字元是否等於s中的字元,其中不匹配時,dp[i][j] = dp[i+1][j]意思就是如果不匹配,t[j]保持不變,移動s[i],這與題目中的可以子串行 是指,通過刪除一些(也可以不刪除)字元且不干擾剩餘字元相對位置所組成的新字串。 對應。

最後就可以寫題啦,不要忘了陣列開大一點,不然會越界。

不一定正確,有錯誤歡迎大佬指出!

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