每日刷題 不同的子串行

2021-09-27 19:15:13 字數 979 閱讀 6969

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

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

示例 1:

輸入: s = 「rabbbit」, t = 「rabbit」

輸出: 3

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

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

rabbbit

^^^^ ^^

rabbbit

^^ ^^^^

rabbbit

^^^ ^^^

示例 2:

輸入: s = 「babgbag」, t = 「bag」

輸出: 5

解釋:如下圖所示, 有 5 種可以從 s 中得到 「bag」 的方案。

babgbag

^^ ^

babgbag

^^ ^

babgbag

^ ^^

babgbag

^ ^^

babgbag

^^^

這道題很經典。

首先,這道題一定可以用動態規劃處理。為什麼?因為存在最優子結構。

可惜,我沒有想到子結構之間的關係。。

退而求其次,我想到的方法為:列舉 + 回溯。

列舉出所有可能的結果,檢查是否匹配字串 t.

可惜,超時了。

把動態規劃貼上來,跟著**走一遍,細細思考。

record[i][j] 代表 t 前 i 字串可以由 s 的前 j 字串組成最多個數.

**:

class

solution

};

每日刷題 不同路徑

例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 100。示例 1 輸入 m 3,n 2 輸出 3 解釋 從左上角開始,總共有 3 條路徑可以到達右下角。向右 向右 向下 向右 向下 向右 向下 向右 向右 示例 2 輸入 m 7,n 3 輸出 28 解答 這道題...

每日刷題 不同路徑

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?示例 例 1 輸入 m 3,n 2 輸出 3 解釋 從左上角開始,總共有 3 條路徑可以到達右下角 ...

力扣每日一題115 不同的子串行

1.暴力法超時 class solution if i s.size i t.size return 到任意末端返回 if s i t i else return public int numdistinct string s,string t 2.動態規劃 從後往前遍歷 dp i j 代表 s i...