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相关推荐

  1. 【leetcode】97. Interleaving String

    题目如下: 解题思路:本题可以采用动态规划的方法.记dp[i][j]表示用s1的前i个字符和s2的前j个字符能否组成s3的前(i+j)个字符,如果dp[i-1][j]是True的话,只要s1[i] = ...

  2. 97. Interleaving String 交错字符串

    Title 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...

  3. 【To Understand !!! DP or 递归】LeetCode 87. Scramble String

    LeetCode 87. Scramble String 参考链接:[1]https://blog.csdn.net/makuiyu/article/details/44926439 [2]http: ...

  4. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  5. LeetCode算法入门- String to Integer (atoi)-day7

    LeetCode算法入门- String to Integer (atoi)-day7 String to Integer (atoi): Implement atoi which converts ...

  6. [LeetCode]844. Backspace String Compare 解题报告(C++)

    [LeetCode]844. Backspace String Compare 解题报告(C++) 题目描述 Given two strings S and T, return if they are ...

  7. LeetCode Interleaving String(动态规划)

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...

  8. LeetCode 97. 交错字符串(DP)

    1. 题目 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...

  9. leetcode - Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...

最新文章

  1. 大闸蟹的OO第二单元总结
  2. CLH锁 、MCS锁
  3. 把工程部署在tomcat的root路径下
  4. 用java写一个日历_2017.12.2 用java做一个日历
  5. oracle的存储过程
  6. 怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)
  7. json和python中字典的区别和联系_Python 中json与字典的关系
  8. TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
  9. 终端软件_DMSTerminal现场管控终端软件正式发布
  10. Java线程—如何解决Swing的单线程问题-----------Swing线程机制
  11. html音频自动播放隐藏控制器,HTML5 音频回放/播放控制器
  12. kibana创建es索引_es 索引数据创建mapping 普通内部对象 嵌套文档 父子文档创建和查询...
  13. java成神之——Fork/Join基本使用
  14. 容器 10 年,Docker 6 年
  15. 二分搜索,欧几里德算法
  16. document.body.scrollTop值为0的解决方法[转]
  17. OBS-Linux直播神器(录屏神器)
  18. JAVA基础知识点总结
  19. 滑尺计算——丈量宇宙的直尺
  20. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求

热门文章

  1. C++ Primer Plus学习(八)——函数进阶
  2. 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
  3. java生成txt_Java ThreadDump 生成解析
  4. 在线运行java代码并得到结果_Java代码是如何运行的?
  5. 动态新增表字段_国际法规 | 欧盟POPs法规更新新增三氯杀螨醇、修订PFOS的豁免——北测集团...
  6. 队列和通知区别_Java多线程学习(五)——等待通知机制
  7. 编程中什么叫做元素什么叫帧_R编程中的数据帧
  8. linux nload_Linux nload命令
  9. groupdel 删除组_如何在Linux中删除组– groupdel命令
  10. java关键字保留字_Java这个关键字