原题链接在这里:https://leetcode.com/problems/interleaving-string/

这是一道DP题,用boolean数组dp维护历史数据,dp[i][j]表示长度为i的s1和长度为j的s2能否组成长度为 i+j 的s3.

递推式是若当前s3的最后一个char与s1的最后一个char相同,并且dp[i-1][j]为true, 那么dp[i][j]为true;

或者当前s3的最后一个char与s2的最后一个char相同,并且dp[i][j-1]为true, 那么dp[i][j]为true, 两者是 或 的关系。

初始化第一排时就是s2长度为0时,看s3和s1最后一个char若相同 并且 s1的前一个字符对应的dp是true, 那么返回就是true; 第一列同理。

Note: 1. dp的大小是 (len1+1) * (len2+1). dp[0][0] = true是s1,s2,s3长度都为0的情况。

2. for loop时 i 是 <= 而不是< len1.

3. 初始化第一行第一列时别忘了校验前一个dp的值, 如dp[i-][0].

4. 本题可以使用降维来做。

AC Java:

public class Solution {public boolean isInterleave(String s1, String s2, String s3) {if(s3.length() != s1.length()+s2.length()){return false;}int len1 = s1.length();int len2 = s2.length();boolean [][] dp = new boolean[len1+1][len2+1];dp[0][0] = true;for(int i = 1; i<=len1; i++){   //errorif(s1.charAt(i-1) == s3.charAt(i-1) && dp[i-1][0]){ //errordp[i][0] = true;}}for(int j = 1; j<=len2; j++){if(s2.charAt(j-1) == s3.charAt(j-1) && dp[0][j-1]){dp[0][j] = true;}}for(int i = 1; i<=len1; i++){for(int j =1; j<=len2; j++){char c = s3.charAt(i+j-1);if(c == s1.charAt(i-1) && dp[i-1][j]){dp[i][j] = true;}if(c == s2.charAt(j-1) && dp[i][j-1]){dp[i][j] = true;}}}return dp[len1][len2];}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4824939.html

LeetCode Interleaving String相关推荐

  1. LeetCode Interleaving String(动态规划)

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

  2. leetcode - Interleaving String

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

  3. [LeetCode] Interleaving String

    1. 是一个很明显的动态规划题. 2. s3中的每个字符不是s1中的就是s2中的,只要根据它之前的状态做转移就可以. 1 class Solution { 2 public: 3 bool isInt ...

  4. 【重点!DP】LeetCode 97. Interleaving String

    LeetCode 97. Interleaving String 参考网址:[1]https://www.youtube.com/watch?v=HmAF9xeS_2I [2]http://www.c ...

  5. 【细节实现题】LeetCode 8. String to Integer (atoi)

    LeetCode 8. String to Integer (atoi) Solution1:我的答案 参考链接:http://www.cnblogs.com/grandyang/p/4125537. ...

  6. LeetCode 8. String to Integer (atoi)(字符串)

    LeetCode 8. String to Integer (atoi)(字符串) LeetCode 8 String to Integer atoi字符串 问题描述 解题思路 参考代码 By Sca ...

  7. 【leetcode】97. Interleaving String

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

  8. leetcode解题报告:Interleaving String

    问题描述: 给定两个字符串s1, s2,判断字符串s3是否是由s1.s2交错构成. 例子: s1 = "aabcc", s2 = "dbbca", When s ...

  9. LeetCode Scramble String

    LeetCode解题之Scramble String 原题 一个字符串能够拆分成两个都不为空的子字符串,而子字符串(长度大于等于二)也能够不断这样拆分下去.如今能够随意交换拆分出来两部分的位置来改变字 ...

最新文章

  1. 五 Django 1.5.4 User Authentication 用户认证
  2. Android ContentProvider、ContentResolver和ContentObserver的使用
  3. 几本国外著名反演书籍(高清版资源)
  4. 【绝对干货】kafkastream广告
  5. 【python之路14】发送邮件实例
  6. u盘无法复制文件进去_只需一招,禁止Windows复制文件到U盘,再也不用担心你的资料被拷走!...
  7. debian关闭开机自动启动时候的gui
  8. 4周第4次课 压缩打包介绍 gzip bzip2 xz压缩工具
  9. 2018年计算机基础模拟试题,2018年大学计算机基础试题及答案
  10. 数据库习题(填空题二)
  11. windows系统服务器打补丁,给Windows打补丁太难?2招搞定
  12. “L3级”自动驾驶落地指导思想:高速辅助人,低速替代人
  13. 二维码签到的几大优势,你了解几个?
  14. 标题:缩位求和 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248 * 15 = 3720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得 2
  15. 给王凌打Call的,原来是神奇的智能湖仓
  16. 领导让程序员帮他加油,看到加油卡余额!网友:中石化老总石锤
  17. AURIX TC397 SCU 之 ERU 外部中断
  18. 系统平台:新店如何打造爆款
  19. ping包 命令格式 用法集
  20. 使用大白菜制作U盘启动器并安装win10 64位系统

热门文章

  1. 数据自动机之如何使用CYaRon造数据
  2. 微调︱caffe中fine-tuning模型三重天(函数详解、框架简述)+微调技巧
  3. [NLP]OpenNLP块检测器(Chunker)的使用
  4. [人脸识别]什么叫One-shot learning
  5. [tensorflow]tensorflow2.0的优化理论
  6. 数据结构之算法与线性表
  7. 性能翻倍!斯坦福Matei团队推出机器学习模型优化新方法
  8. 删除数组中的指定元素 | JavaScript
  9. 深度学习框架中的魔鬼:探究人工智能系统中的安全问题
  10. android:EditText属性/去边框