LeetCode115不同的子序列
题目说明在这里就不贴出来了,相信打开这篇文章的小伙伴们肯定都是在刷LeetCode的。
一开始我的想法是dfs+回溯,结果运行超时,一开始我就觉得可能会超时,结果不出所料【手动笑哭】。
后来我想了下dfs在每一次都需要遍历,这样时间复杂度当然高啊。
后来经过了不知道多久的好久,我就学会了使用动态规划的方法,哎,动态规划一直是我的弱点所在,逻辑思维能力跟不上!
动态规划的重点在于找到状态转换方程,说是这样说的,但是我每次都找不到转换方程啊。。。。哈哈哈哈,无奈大笑!
废话不多,直接上图,一图胜千言!
解释上图:各位小伙伴可以发现蓝色一行全为1,啥意思尼?因为我们设置dp[t.length+1][s.length+1],多一行
和多一列的目的是我们需要dp【0】【0】的那个初始值1,因为当 s 为空 t 为空时匹配情况为1,然后当 t 为空随
着 s 不断变长其匹配数仍为1。黄色一列同理可得当 s 为空 t 不空时没有可以匹配的。
然后我们通过观察可以猜出
if(t【i-1】== s【j-1】)dp【i】【j】 = dp【i-1】【j-1】+ dp【i】【j-1】
else dp【i】【j】 = dp【i】【j-1】
else后面的很好理解,例如当 t 取前面一个字符 “r” 然后依次从前往后去s中找匹配,当 s = “r”时匹配为1, 当 s = “ra”
时匹配仍为1,依次类推。
然而,if后面的那个表达式又是什么意思呢?
如图,这个例子可以很好的解释,现在要求最后一个方框中的值,dp【i】【j】 = dp【i-1】【j-1】+ dp【i】【j-1】
在这里的解释就是:在a之前b的个数,有多少个b就可以与a组成多少对匹配,
然后加上当s = “ba” s = “babagc” 时,能够匹配的ba的数量
LeetCode115不同的子序列的更多相关文章
- [Swift]LeetCode115. 不同的子序列 | Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of S which equals T. A su ...
- 【1】【leetcode-115】 不同的子序列 distinct-subsequences
不同的子序列 distinct-subsequences(hard) (忘了,典型) 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删 ...
- 【1】【leetcode-115 动态规划】 不同的子序列
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如," ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- [LeetCode] Arithmetic Slices II - Subsequence 算数切片之二 - 子序列
A sequence of numbers is called arithmetic if it consists of at least three elements and if the diff ...
- [LeetCode] Is Subsequence 是子序列
Given a string s and a string t, check if s is subsequence of t. You may assume that there is only l ...
- [LeetCode] Wiggle Subsequence 摆动子序列
A sequence of numbers is called a wiggle sequence if the differences between successive numbers stri ...
- [LeetCode] Increasing Triplet Subsequence 递增的三元子序列
Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...
随机推荐
- Python基础之变量,常量,注释,数据类型
由于上学期学了C语言,对于这一块的内容肯定算熟悉,只是注释的方法有些不同,但得还是一步一步的来!没有基础的同学看了这篇随笔也会大有助益的! 什么是变量?所谓变量就是将一些运算的中间结果暂存到内存中,以 ...
- 腾讯云centos7 从零搭建laravel项目
目标,访问网站出现: -----------------------分割线---------------------------------------- 一.Laravel Homestead 环境 ...
- TestNG中DataProvider的用法一
目录 为什么要使用DataProvider DataProvider的常规用法 带Method参数的DataProvider 带ITestContext的DataProvider DataProvid ...
- Scrapy框架安装失败解决办法
安装报错信息 正常安装: pip3 install scrapy 出现报错信息如下: 两种解决办法 第一种方法 最根本得解决办法 需要我们安装 Microsoft Visual C++ 14.0 ...
- Zabbix 中使用 Percona Monitoring Plugins 监控 MySQL
1.先安装agent客户端 tar zxvf zabbix-3.2.6.tar.gz cd zabbix-3.2.6 ./configure --prefix=/data/zabbix --enabl ...
- linux自学
Linux文件与目录管理 所有不太会的命令,可以用man +命令,查看相关解释文档 绝对路径:从根路径写起的路径,/usr/local 相对路径:例如:路径a:~/demo/test 路径b ...
- 用多线程优化Excel表格数据导入校验的接口
公司的需求,当前某个Excel导入功能,流程是:读取Excel数据,传入后台校验每一条数据,判断是否符合导入要求,返回给前端,导入预览展示.(前端等待响应,难点).用户再点击导入按钮,进行异步导入(前 ...
- Unity基础之:UnityAPI的学习
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- MyBatis之#{} and ${}
#{} 和 ${} 之间最大的差别就是 #{}会在使用的时候被加上 ‘’ 引号, ${}直接传值,不做任何处理 1.#{}对传入的参数会做预编译,也就是会当做字符串来处理 select * from ...
- JVM总结(二)
JVM总结(2)java内存区域.字节码执行引擎 1.内存区域 程序计数器:知道线程执行位置,保证线程切换后能恢复到正确的执行位置. 虚拟机栈:存栈帧.栈帧里存局部变量表.操作栈.动态连接.方法返回地 ...