思路:動態規劃
狀態定義:
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.charat(y) == t.charat(0),f(0, y) = f(0, y - 1) + 1;否則f(0, y) = f(0, y - 1)。
(2)對於x > 0的情況
a:如果x > y,即t'的長度大於s',顯然f(x, y) = 0。
b:如果x <= y,
b-1:如果t.charat(x) == s.charat(y),則f(x, y) = f(x, y - 1) + f(x - 1, y - 1)
b-2:否則,f(x, y) = f(x, y - 1)。
時間複雜度和空間複雜度均是o(m * n),其中m為t的長度,n為s的長度。
int numdistinct(std::string s, std::string t) else }}
return a[t.size()][s.size()];
}
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 解...
LeetCode 115 不同的子串行
本人解這個題用的是動態規劃的思想。dp i j 代表t前i字串可以由sj字串組成最多個數.當s j t i 這個時候dp i j dp i j 1 當s j t i 這個時候dp i j dp i 1 j 1 dp i j 1 其中dp i 1 j 1 表示是用s j 匹配t i 的情況有多少 dp...