这个题,每看,还是不会,又复习了一遍。

class Solution {
public:int numDistinct(string s, string t) {vector<vector<long>> dp(t.length()+1,vector<long>(s.length()+1,0));for(int i=0;i<=s.length();i++)dp[0][i]=1;for(int i=1;i<=t.length();i++){for(int j=1;j<=s.length();j++){if(t[i-1]==s[j-1])dp[i][j]=dp[i][j-1]+dp[i-1][j-1];else dp[i][j]=dp[i][j-1];}}return dp[t.length()][s.length()];     }
};

行是子串t,也就是目标要找的子串,列是源串s,要在这里找不同子序列,能够与t进行匹配。对于dp[i][j],也就是串t的前i个字符在串s的前j个字符里面有多少个子序列,默认dp[i-1][j-1],dp[i][j-1],dp[i-1][j]这些子问题都求解完了,怎么得到dp[i][j]。

如果当前s[j]和t[i]不相等,显然说明s[j]这个字符没啥用啊,在s的前j个字符里找t的前i个字符,跟在s的前j-1个字符里找t的前i个字符一样,所以dp[i][j]=dp[i][j-1];

如果当前s[j]和t[i]相等,那就要考虑用不用这个s[j]了,如果用的话,有多少种?就等于dp[i-1][j-1]种;如果不用s[j],那么dp[i][j]=dp[i][j-1],显然用与不用加起来才是整体种数,所以dp[i][j]=dp[i-1][j-1]+dp[i][j-1] 。

不知道下次还能不能忘记。。

动态规划-leetcode#115-不同的子序列相关推荐

  1. LeetCode 115. 不同的子序列(动态规划)

    题目描述 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如,"ACE" 是 "ABCDE" 的一个子 ...

  2. 119. Leetcode 115. 不同的子序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]: 长度为i的s子串删除字符得到长度为j的t的子串的方法个数 步骤二.推断状态方程: 这种情况一般都会分字符相等和不相等的情况.如果当前的字 ...

  3. leetcode 115. 不同的子序列(dp)

    给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数. 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如,&quo ...

  4. [动态规划] leetcode 10 正则表达式匹配

    [动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...

  5. 【重点!DP】LeetCode 115. Distinct Subsequences

    LeetCode 115. Distinct Subsequences Solution1: 不会做.. 参考网址:https://www.youtube.com/watch?v=mPqqXh8XvW ...

  6. leetcode 算法-乘积最大子序列-152

    leetcode 算法-乘积最大子序列 leetcode 传送门 题目 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2, ...

  7. 动态规划解决最长公共子序列

    动态规划解决最长公共子序列 问题描述 给定两个序列,例如 X = "ABCBDAB".Y = "BDCABA",求它们的最长公共子序列的长度. 递归关系 c[i ...

  8. C++动态规划之最长上升子序列

    1 子序列与上升子序列 1.1 子序列 一个序列A={a1,a2,...an}中任意删除若干项,剩余的序列叫做A的一个子序列.例如序列A={1,3,5,4,2},删除其中的第3项和第5项,得到序列B= ...

  9. 动态规划解最长公共子序列(LCS)(附详细填表过程)

    目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...

最新文章

  1. NHibernate初学者指南(1):开篇
  2. vs2010无法调试JS
  3. Flink的定时器(EventTime和ProcessTime)
  4. Centos6.3安装KVM
  5. python使用codecs模块进行文件操作-读写中英文字符
  6. 【linux所有命令——复习】
  7. 第二阶段个人工作总结03
  8. java垃圾回收机制简介
  9. 【PyTorch】SiLU激活函数
  10. 不会拼音怎么学计算机,不会拼音打字怎么办
  11. visual C#(二十五)实现UWP应用的用户界面
  12. excel取末尾数字_excel取后面几位数
  13. dumprep 0 -u进程是否病毒?
  14. 为你的树莓派WI-FI配置加密密码
  15. 如何关闭 Intel RST
  16. Potree使用指南
  17. 下级对上级回复已阅知_下级对上级回复已阅知_工作中回复领导,绝不能用OK!除此之外,还有四条...
  18. 路由器 刷 linux系统版本,一个小型的无线路由器 Linux 系统OpenWRT[转]
  19. Mstar 编译器的搭建
  20. 百度开放平台调用人脸识别等api问题

热门文章

  1. Language Models are Unsupervised Multitask Learners 笔记
  2. (转)speex详细介绍--概念、移植、编译、命令行等
  3. Select下拉框实现中国省市区三级联动
  4. 安装CentOS7虚拟机(超详细)
  5. charles抓包常用
  6. 【总结】包和模块(2022.4.27)
  7. unity 一万个具有相同动画的物体渲染
  8. Python实现修改图片分辨率(含完整源码)
  9. k均值聚类(k-means)
  10. 调制解调器以及ADSL拨号上网