給定乙個字串 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
^^^
class solution:
def numdistinct(self, s: str, t: str) -> int:
if not s:
return 0
dp = [[0]*(len(t)+1) for _ in range(len(s)+1)]
for i in range(len(s)+1):
dp[i][0] = 1
for i in range(1,len(t)+1):
dp[0][i] = 0
for i in range(1,len(s)+1):
for j in range(1,len(t)+1):
if s[i-1] == t[j-1]:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
else:
dp[i][j] = dp[i-1][j]
return dp[-1][-1]
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 不同的子串行
本人解這個題用的是動態規劃的思想。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...