代码随想录算法训练营第五十五天 |392. 判断子序列、115. 不同的子序列
392. 判断子序列
题目链接:392. 判断子序列
- 和LCS类似
- 二分法
115. 不同的子序列
题目链接:115. 不同的子序列
-
这道题目如果不是子序列,而是要求连续序列的,那就可以考虑用KMP。
-
dp含义:i - 1为结尾的s中有 j - 1为结尾的t的个数为
dp[i][j] -
递推公式:
if(s[i] = t[j]) {dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]}else if(s[i] != t[j]) { dp[i][j] = dp[i - 1][j]}
-
但如果
s[0]可以匹配t[0],那么又有两种情况,这两种情况是累加的关系:1、让
s[0]匹配t[0],那么原问题转化为在s[1..]的所有子序列中计算t[1..]出现的次数。2、不让
s[0]匹配t[0],那么原问题转化为在s[1..]的所有子序列中计算t[0..]出现的次数。为啥明明
s[0]可以匹配t[0],还不让它俩匹配呢?主要是为了给s[0]之后的元素匹配的机会,比如s = "aab", t = "ab",就有两种匹配方式:a_b和_ab。 -
球盒模型,两种方式。