392. 判断子序列
动规解法。
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
n1, n2 = len(s), len(t)
dp = [[0] * (n2 + 1) for _ in range(n1 + 1)]
for i in range(1, n1 + 1):
for j in range(1, n2 + 1):
if s[i - 1] == t[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = dp[i][j - 1]
return dp[n1][n2] == n1
115. 不同的子序列
class Solution:
def numDistinct(self, s: str, t: str) -> int:
n1, n2 = len(s), len(t)
dp = [[0] * (n2 + 1) for _ in range(n1 + 1)]
for i in range(0, n1 + 1):
dp[i][0] = 1
for i in range(1, n1 + 1):
for j in range(1, n2 + 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[n1][n2]
今日总结:
对删除这一概念还不是很明白。