代码随想录算法训练营第五十四天|392.判断子序列|115.不同的子序列

一、392.判断子序列

思想:这题的主要思路是如何判断s是否为t的子序列的方法,因为前面做过最大长度子序列,但是如果没有人提醒你,你很难将那题联系到这题。如果最大子序列的长度等于s的长度,即s为t的子序列。可以直接用最大长度的方法通过这个题,然后还可以在这个基础上改进一下,就是你不用去删除s,因为要判断s是否为t的子序列,所以s不能删除。然后就有两种情况,一种是两个值相同,dp[i][j] = dp[i-1][j-1]+1,另一种是dp[i][j] = dp[i][j-1]这种情况是两个值不同。

代码随想录算法训练营第五十四天|392.判断子序列|115.不同的子序列_第1张图片

二、 115.不同的子序列

思想:因为前面做过子序列的题,你很容易想到如何进行定义,这题的主要难点是得到递归公式,对于s[i-1] != t[j-1]的情况你很容易想到将s字符串删除一个就行了,但是对于它们两个值相同的情况你很容易忽略,通常情况下你会同时删去s和t字符串中的各一个字符,但是其实还有一种情况就是删掉s的一个字符,如果想不到这种情况你就想例子bagg和bag。

代码随想录算法训练营第五十四天|392.判断子序列|115.不同的子序列_第2张图片

 

你可能感兴趣的:(动态规划,算法)