【重点!DP】LeetCode 97. Interleaving String
LeetCode 97. Interleaving String
参考网址:[1]https://www.youtube.com/watch?v=HmAF9xeS_2I
[2]http://www.cnblogs.com/grandyang/p/4298664.html
【初始化】这道题的大前提是字符串s1和s2的长度和必须等于s3的长度,如果不等于,肯定返回false。当s1和s2是空串的时候,s3必然是空串,则返回true。所以直接给dp[0][0]赋值true,然后若s1和s2其中的一个为空串的话,那么另一个肯定和s3的长度相等,则按位比较,若相同且上一个位置为True,赋True,其余情况都赋False,这样的二维数组dp的边缘就初始化好了。
在任意非边缘位置dp[i][j]时,它的左边或上边有可能为True或是False,两边都可以更新过来,只要有一条路通着,那么这个点就可以为True。那么我们得分别来看,如果左边的为True,那么我们去除当前对应的s2中的字符串s2[j - 1] 和 s3中对应的位置的字符相比(计算对应位置时还要考虑已匹配的s1中的字符),为s3[j - 1 + i], 如果相等,则赋True,反之赋False。 而上边为True的情况也类似,所以可以求出递推公式为:
dp[i][j] = (dp[i - 1][j] && s1[i - 1] == s3[i - 1 + j]) || (dp[i][j - 1] && s2[j - 1] == s3[j - 1 + i])
其中dp[i][j] 表示的是 s2 的前 i 个字符和 s1 的前 j 个字符是否匹配 s3 的前 i+j 个字符,根据以上分析,可写出代码如下:
class Solution {
public:bool isInterleave(string s1, string s2, string s3) {if (s1.size() + s2.size() != s3.size()) return false;int n1 = s1.size();int n2 = s2.size();vector<vector<bool> > dp(n1 + 1, vector<bool> (n2 + 1, false)); dp[0][0] = true;for (int i = 1; i <= n1; i++) dp[i][0] = dp[i - 1][0] && (s1[i - 1] == s3[i - 1]);for (int j = 1; j <= n2; j++) dp[0][j] = dp[0][j - 1] && (s2[j - 1] == s3[j - 1]);for (int i = 1; i <= n1; i++) {for (int j = 1; j <= n2; j++) {dp[i][j] = (dp[i - 1][j] && s1[i - 1] == s3[i - 1 + j]) || (dp[i][j - 1] && s2[j - 1] == s3[j - 1 + i]);}}return dp[n1][n2];}
};
【重点!DP】LeetCode 97. Interleaving String相关推荐
- 【leetcode】97. Interleaving String
题目如下: 解题思路:本题可以采用动态规划的方法.记dp[i][j]表示用s1的前i个字符和s2的前j个字符能否组成s3的前(i+j)个字符,如果dp[i-1][j]是True的话,只要s1[i] = ...
- 97. Interleaving String 交错字符串
Title 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...
- 【To Understand !!! DP or 递归】LeetCode 87. Scramble String
LeetCode 87. Scramble String 参考链接:[1]https://blog.csdn.net/makuiyu/article/details/44926439 [2]http: ...
- 【LeetCode】字符串 string(共112题)
[3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...
- LeetCode算法入门- String to Integer (atoi)-day7
LeetCode算法入门- String to Integer (atoi)-day7 String to Integer (atoi): Implement atoi which converts ...
- [LeetCode]844. Backspace String Compare 解题报告(C++)
[LeetCode]844. Backspace String Compare 解题报告(C++) 题目描述 Given two strings S and T, return if they are ...
- LeetCode Interleaving String(动态规划)
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...
- LeetCode 97. 交错字符串(DP)
1. 题目 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...
- leetcode - Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...
最新文章
- 大闸蟹的OO第二单元总结
- CLH锁 、MCS锁
- 把工程部署在tomcat的root路径下
- 用java写一个日历_2017.12.2 用java做一个日历
- oracle的存储过程
- 怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)
- json和python中字典的区别和联系_Python 中json与字典的关系
- TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
- 终端软件_DMSTerminal现场管控终端软件正式发布
- Java线程—如何解决Swing的单线程问题-----------Swing线程机制
- html音频自动播放隐藏控制器,HTML5 音频回放/播放控制器
- kibana创建es索引_es 索引数据创建mapping 普通内部对象 嵌套文档 父子文档创建和查询...
- java成神之——Fork/Join基本使用
- 容器 10 年,Docker 6 年
- 二分搜索,欧几里德算法
- document.body.scrollTop值为0的解决方法[转]
- OBS-Linux直播神器(录屏神器)
- JAVA基础知识点总结
- 滑尺计算——丈量宇宙的直尺
- Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
热门文章
- C++ Primer Plus学习(八)——函数进阶
- 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
- java生成txt_Java ThreadDump 生成解析
- 在线运行java代码并得到结果_Java代码是如何运行的?
- 动态新增表字段_国际法规 | 欧盟POPs法规更新新增三氯杀螨醇、修订PFOS的豁免——北测集团...
- 队列和通知区别_Java多线程学习(五)——等待通知机制
- 编程中什么叫做元素什么叫帧_R编程中的数据帧
- linux nload_Linux nload命令
- groupdel 删除组_如何在Linux中删除组– groupdel命令
- java关键字保留字_Java这个关键字