給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。
乙個字串的乙個子串行是指,通過刪除一些(也可以不刪除)字元且不干擾剩餘字元相對位置所組成的新字串。(例如,「ace」 是 「abcde」 的乙個子串行,而 「aec」 不是)
示例 1:這道題很經典。輸入: s = 「rabbbit」, t = 「rabbit」
輸出: 3
解釋:如下圖所示, 有 3 種可以從 s 中得到 「rabbit」 的方案。
(上箭頭符號 ^ 表示選取的字母)
示例 2:rabbbit
^^^^ ^^
rabbbit
^^ ^^^^
rabbbit
^^^ ^^^
輸入: 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...