目录
392.判断子序列
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
m, n = len(s), len(t)
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(1, m+1):
for j in range(1, n+1):
if s[i-1] == t[j-1]:
dp[i][j] = dp[i-1][j-1]+1 #以i-1为尾的字符串s和以j-1为尾的字符串t的相同子序列的长度
else:
dp[i][j] = dp[i][j-1]
return dp[-1][-1] == m
115.不同的子序列
class Solution:
def numDistinct(self, s: str, t: str) -> int:
#dp[i][j] 以i-1为尾的s中有以j-1为尾的t的个数
m, n = len(s), len(t)
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(m):
dp[i][0] = 1
for j in range(1, n):
dp[0][j] = 0
for i in range(1, m+1):
for j in range(1, n+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]