leetcode115. 不同的子序列
一:题目
二:代码
class Solution {public:/**思路:动规分析走一波1>:确定dp数组以及下标的含义dp[i][j] 表示的是 以下标i-1结尾的子序列s中出现以j-1结尾的子序列t的 个数2>:确定dp数组的状态递推公式这里考虑两种状况 一种就是 s[i-1] == s[j-1] 一种就是字符串不相等;当字符串相等的时候也有两种情况一种是算上 s[i-1]字符进行匹配 即 dp[i][j] = dp[i-1][j-1];//这里我们是前面s中包含t的个数一种是不算上 s[i-1]字符进行匹配 即 dp[i][j] = dp[i-1][j];//这个就是不包含s[i-1]字符那么我们总的个数 dp[i][j] = dp[i-1][j-1] + dp[i-1][j];bagg 和bag s[i-1] = s[3] = g;那么我们计算个数的时候 一种就是 不算上s[3] 一种就是算上是s[3]但是无论哪种 我们都需要注意的是 我们最终dp[i][j]统计的是s包含t的个数所以 dp[i][j] = dp[i-1][j-1] + dp[i-1][j];当字符串不相等的时候 也就是不用匹配s[i-1] 那就匹配s[i-1]之前的字符也就是 dp[i][j] = dp[i-1][j];3>:确定dp数组的初始化当s字符串和空字符串进行匹配的时候;我们便可以得出 dp[i][0] = 1;因为不论i为何值 反正其肯定会包含空字符串;4>:确定dp数组的遍历顺序这里外层循环是s内层循环是t5>:举例验证s = "babgbag" t = "bag"b a g1 0 0 0b 1 1 0 0a 1 1 1 0 b 1 2 1 0g 1 2 1 1 b 1 3 1 1a 1 3 4 1g 1 3 4 5**/int numDistinct(string s, string t) {//uint:取值范围是 2^31 - 1,即:0~4294967295。这里表示的范围不同 如果用int 会报错 vector<vector<uint64_t> > dp(s.size()+1,vector<uint64_t>(t.size()+1,0));for (int i = 0; i <= s.size(); i++) dp[i][0] = 1;for (int i = 1; i <= s.size(); i++) {for (int j = 1; j <= t.size(); j++) {if (s[i-1] == t[j-1]) dp[i][j] = dp[i-1][j-1] + dp[i-1][j];//dp[i][j]//=算上s[i-1]字符+不算s[i-1]字符else dp[i][j] = dp[i-1][j];//}}return dp[s.size()][t.size()];}
};
这种一做就两个钟的题啥时候是个头呀 动态规划把我整异域了
leetcode115. 不同的子序列相关推荐
- leetcode115 不同的子序列
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如," ...
- 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...
- LeetCode算法题整理(200题左右)
目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...
- leetcode解题总览
3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...
- 【代码随想录】-动态规划专题
文章目录 理论基础 斐波拉契数列 爬楼梯 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 背包问题--理论基础 01背包 二维dp数组01背包 一维数组(滚动数组) 装满背包 ...
- Leetcode动态规划专题(共38道)
某一问题有很多重叠子问题 每一状态一定由上一状态推导出来 而贪心没有状态推导,而是直接选局部最优 解决方式: 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历 ...
- 【精品计划1】动态规划入门到熟悉,看不懂来打我啊
持续更新...... 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳 ...
- 动态规划入门到熟悉,看不懂来打我啊
动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...
- LeetCode简单题之最长和谐子序列
题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. 数组的子序列是一个由数组派生出来的 ...
最新文章
- Redis scan命令原理
- 【数据结构与算法】之深入解析如何确定单链表有环并求环的入口和长度
- 使用 RxJava 的正确姿势
- 算法:移除最外层的括号1021. Remove Outermost Parentheses
- c语言学习视频(学c语言看谁的视频)
- java digit_EditText在java代码中设置digits属性
- 嵌入式软件测试怎么实现自动化测试?
- 微信小程序 flex:1表示什么
- 使用netron实现对onnx模型结构可视化
- Windows 7 频繁提示:计算机的内存不足
- steam linux 安装目录,如何在Ubuntu中安装Steam | MOS86
- 课后自主练习(递归)1059. Fj haozi medium《编程思维与实践》个人学习笔记
- 实施质量保证和控制质量的区别
- 米兔机器人终于拼完了_米兔机器人上手组装如果你不会拼装或拆卸建议收藏
- 企业生产中,APS系统有哪些具体应用场景?
- [NXOpen] Siemens NX 二次开发 (c#) 安装,配置,新建项目,调试, 调用程序
- 内卷失败:敲了 10000 小时代码,我也没能成为一名高级程序员
- docker logs 说明
- 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
- 便携式明渠流量计(比对装置)——适用于四种基本堰槽
热门文章
- 关于.NET下开源及商业图像处理(PSD)组件
- VSCode 用户自定义片段 snippet 基本语法说明
- java 接口防刷_java轻量级接口限流/防刷插件
- ASP.NET MVC入门(一)---MVC的Hello World
- Andorid之打包出现Proguard returned with erro code 1.See console解决办法
- linux之类似Windows的资源管理器gnome-system-monitor(可用这个杀死进程)
- Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码
- 清华博士生放弃科研,跑去当中学教师,值得吗?
- 有一说一,确实。。 | 今日最佳
- C语言入门经典材料领走不谢!