392.判断子序列
每次判断成功就加一,最后等于长度返回True,不然返回False
115.不同的子序列
这道题真的挺难想的
个人理解:以往的子序列是求长度,所以只需要每次加一或者继承最大值即可,此次是求子序列数量,在初始化和遍历过程就要认真思考题目条件。
初始化:因为考察的是t在s的子序列数量,首先就要考虑空字符串在s中永远为1
for i in range(n + 1):
dp[i][0] = 1
遍历过程:匹配成功,dp值确认为前面字符串的匹配量+当前字符与前面的s字符串的匹配量(一个简单的理解,这其中分别为继承与更新,继承之前的匹配量以及更新当前字符的匹配量)
若匹配失败,要继承的就是之前更新的(即当前字符与前面的s字符串的匹配量)
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]
这题很考验思考,我也第一时间没想出来,需要三刷