392.判断子序列
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]
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] + 1
else:
dp[i][j] = dp[i][j-1]
if dp[-1][-1] == len(s):
return True
return False
115.不同的子序列
class Solution:
def numDistinct(self, s: str, t: str) -> int:
dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]
for i in range(len(s)):
dp[i][0] = 1
for j in range(1, len(t)):
dp[0][j] = 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]
这两篇博客主要探讨了如何使用动态规划方法来解决字符串的子序列问题。第一个问题`isSubsequence`检查一个字符串`s`是否为另一个字符串`t`的子序列,通过填充动态规划矩阵并检查最后一行最后一个元素是否等于`s`的长度来确定。第二个问题`numDistinct`计算字符串`s`中不同的子序列在字符串`t`中出现的次数,同样利用动态规划矩阵求解。
628

被折叠的 条评论
为什么被折叠?



