一:题目

二:代码

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. 不同的子序列相关推荐

  1. leetcode115 不同的子序列

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

  2. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)

    3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...

  3. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  4. leetcode解题总览

    3/22更新 剑指offer 题目链接 建议大部分题都会做,都能比较快速且准确的写出来.关于做题方式,我的建议是:一道一道刷即可,因为难度一般,不用系统的学习什么知识,遇到实在不会的就跳过即可. 我这 ...

  5. 【代码随想录】-动态规划专题

    文章目录 理论基础 斐波拉契数列 爬楼梯 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 背包问题--理论基础 01背包 二维dp数组01背包 一维数组(滚动数组) 装满背包 ...

  6. Leetcode动态规划专题(共38道)

    某一问题有很多重叠子问题 每一状态一定由上一状态推导出来 而贪心没有状态推导,而是直接选局部最优 解决方式: 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历 ...

  7. 【精品计划1】动态规划入门到熟悉,看不懂来打我啊

    持续更新...... 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳 ...

  8. 动态规划入门到熟悉,看不懂来打我啊

    动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...

  9. LeetCode简单题之最长和谐子序列

    题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. 数组的子序列是一个由数组派生出来的 ...

最新文章

  1. Redis scan命令原理
  2. 【数据结构与算法】之深入解析如何确定单链表有环并求环的入口和长度
  3. 使用 RxJava 的正确姿势
  4. 算法:移除最外层的括号1021. Remove Outermost Parentheses
  5. c语言学习视频(学c语言看谁的视频)
  6. java digit_EditText在java代码中设置digits属性
  7. 嵌入式软件测试怎么实现自动化测试?
  8. 微信小程序 flex:1表示什么
  9. 使用netron实现对onnx模型结构可视化
  10. Windows 7 频繁提示:计算机的内存不足
  11. steam linux 安装目录,如何在Ubuntu中安装Steam | MOS86
  12. 课后自主练习(递归)1059. Fj haozi medium《编程思维与实践》个人学习笔记
  13. 实施质量保证和控制质量的区别
  14. 米兔机器人终于拼完了_米兔机器人上手组装如果你不会拼装或拆卸建议收藏
  15. 企业生产中,APS系统有哪些具体应用场景?
  16. [NXOpen] Siemens NX 二次开发 (c#) 安装,配置,新建项目,调试, 调用程序
  17. 内卷失败:敲了 10000 小时代码,我也没能成为一名高级程序员
  18. docker logs 说明
  19. 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
  20. 便携式明渠流量计(比对装置)——适用于四种基本堰槽

热门文章

  1. 关于.NET下开源及商业图像处理(PSD)组件
  2. VSCode 用户自定义片段 snippet 基本语法说明
  3. java 接口防刷_java轻量级接口限流/防刷插件
  4. ASP.NET MVC入门(一)---MVC的Hello World
  5. Andorid之打包出现Proguard returned with erro code 1.See console解决办法
  6. linux之类似Windows的资源管理器gnome-system-monitor(可用这个杀死进程)
  7. Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码
  8. 清华博士生放弃科研,跑去当中学教师,值得吗?
  9. 有一说一,确实。。 | 今日最佳
  10. C语言入门经典材料领走不谢!