动态规划-leetcode#115-不同的子序列
这个题,每看,还是不会,又复习了一遍。
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-不同的子序列相关推荐
- LeetCode 115. 不同的子序列(动态规划)
题目描述 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如,"ACE" 是 "ABCDE" 的一个子 ...
- 119. Leetcode 115. 不同的子序列 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]: 长度为i的s子串删除字符得到长度为j的t的子串的方法个数 步骤二.推断状态方程: 这种情况一般都会分字符相等和不相等的情况.如果当前的字 ...
- leetcode 115. 不同的子序列(dp)
给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数. 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如,&quo ...
- [动态规划] leetcode 10 正则表达式匹配
[动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...
- 【重点!DP】LeetCode 115. Distinct Subsequences
LeetCode 115. Distinct Subsequences Solution1: 不会做.. 参考网址:https://www.youtube.com/watch?v=mPqqXh8XvW ...
- leetcode 算法-乘积最大子序列-152
leetcode 算法-乘积最大子序列 leetcode 传送门 题目 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2, ...
- 动态规划解决最长公共子序列
动态规划解决最长公共子序列 问题描述 给定两个序列,例如 X = "ABCBDAB".Y = "BDCABA",求它们的最长公共子序列的长度. 递归关系 c[i ...
- C++动态规划之最长上升子序列
1 子序列与上升子序列 1.1 子序列 一个序列A={a1,a2,...an}中任意删除若干项,剩余的序列叫做A的一个子序列.例如序列A={1,3,5,4,2},删除其中的第3项和第5项,得到序列B= ...
- 动态规划解最长公共子序列(LCS)(附详细填表过程)
目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...
最新文章
- NHibernate初学者指南(1):开篇
- vs2010无法调试JS
- Flink的定时器(EventTime和ProcessTime)
- Centos6.3安装KVM
- python使用codecs模块进行文件操作-读写中英文字符
- 【linux所有命令——复习】
- 第二阶段个人工作总结03
- java垃圾回收机制简介
- 【PyTorch】SiLU激活函数
- 不会拼音怎么学计算机,不会拼音打字怎么办
- visual C#(二十五)实现UWP应用的用户界面
- excel取末尾数字_excel取后面几位数
- dumprep 0 -u进程是否病毒?
- 为你的树莓派WI-FI配置加密密码
- 如何关闭 Intel RST
- Potree使用指南
- 下级对上级回复已阅知_下级对上级回复已阅知_工作中回复领导,绝不能用OK!除此之外,还有四条...
- 路由器 刷 linux系统版本,一个小型的无线路由器 Linux 系统OpenWRT[转]
- Mstar 编译器的搭建
- 百度开放平台调用人脸识别等api问题