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 ...
随机推荐
- Vue中beforeRouterEnter的应用
一般判断从哪个页面进入时需要判断路由,用到了beforeRouteEnter方法. 注意:在在内部获取不到外部的this,方法.变量等都获取不到.但是vm.XXXXX可以获取到 beforeRoute ...
- 深入理解Java中的AQS
AQS概述 AbstractQueuedSynchronizer抽象队列同步器简称AQS,它是实现同步器的基础组件,juc下面Lock的实现以及一些并发工具类就是通过AQS来实现的,这里我们通过A ...
- poj 1455 Crazy tea party
这道题第一眼看去很难,其实不然,短短几行代码就搞定了. 说一下大概思路,如果是排成一排的n个人,如 1 2 3 4 5 6 7 8 我们要变成 8 7 6 5 4 3 2 1 需要交换 28次,找规律 ...
- JDK的命令行工具系列 (二) javap、jinfo、jmap
javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出publ ...
- Unity经典游戏编程之:球球大作战
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- C#连接SQL Anywhere 12 数据库
using System;using System.Data.Common; namespace ConsoleApplication27{ class Program { ...
- WEB基础(二)--servlet的生命周期
Servlet的生命周期一般可以用三个方法来表示: init():仅执行一次,负责在装载Servlet时初始化Servlet对象 service() :核心方法,一般HttpServlet中会有get ...
- xcode自动刷新resource下的文件
修改resource下的lua或者ccbi文件时,xcode并不会察觉到,所以需要手动清理xcode缓存和模拟器缓存,开发效率比较低下. 通过以下步骤可以实现自动刷新resource下的文件,且无需手 ...
- Kafka集群配置---Windows版
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,Kafka对消息进行保存时是通过tipic进行分组的.今天我们仅实现Kafka集群的配置.理论的抽空在聊 前言 最近研究kafka,发现网上很多 ...
- PDF.js 详情解说
pdf.js资源下载 点我下载 自定义默认加载的pdf资源 在web/view.js中我们可以通过DEFAULT_URL设置默认加载的pdf.通过上面代码我们也可以看出来可以通过后缀名来指定加载的pd ...