给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”
输出: true

解题思路

数组含义:dp[i][j]s1的前i个和s2的前j个能否组成字符串s3的前i+j长度的子串
状态转移: dp[i][j]=dp[i][j]||(dp[i-1][j]&&s1.charAt(i-1)==s3.charAt(loc))在(i-1,j)的基础上, 判断新加入的s1的i位置是否匹配s3.

代码

class Solution {public boolean isInterleave(String s1, String s2, String s3) {int n=s1.length(),m=s2.length();if(n+m!=s3.length()) return false;boolean[][] dp=new boolean[n+1][m+1];dp[0][0]=true;for(int i=0;i<=n;i++)for(int j=0;j<=m;j++){int loc=i+j-1;if(i>0)dp[i][j]=dp[i][j]||(dp[i-1][j]&&s1.charAt(i-1)==s3.charAt(loc));if(j>0)dp[i][j]=dp[i][j]||(dp[i][j-1]&&s2.charAt(j-1)==s3.charAt(loc));}return dp[n][m];}
}

不一样的动态规划代码

class Solution {public static boolean isInterleave(String s1, String s2, String s3) {int n=s1.length(),m=s2.length();if(n+m!=s3.length()) return false;int[][] dp=new int[n+1][m+1];for(int i=1;i<=m;i++)if(s3.charAt(dp[0][i-1])==s2.charAt(i-1))dp[0][i]=dp[0][i-1]+1;else dp[0][i]=dp[0][i-1];for(int i=1;i<=n;i++)if(s3.charAt(dp[i-1][0])==s1.charAt(i-1))dp[i][0]=dp[i-1][0]+1;else dp[i][0]=dp[i-1][0];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){    if(s3.charAt(dp[i-1][j])==s1.charAt(i-1))dp[i][j]= Math.max(Math.max(dp[i][j-1],dp[i-1][j]+1),dp[i][j]);if(s3.charAt(dp[i][j-1])==s2.charAt(j-1))dp[i][j]= Math.max(Math.max(dp[i-1][j],dp[i][j-1]+1),dp[i][j]);}   return  dp[n][m]==s3.length();}
}

leetcode97. 交错字符串(动态规划)相关推荐

  1. LeetCode 97交错字符串(动态规划)

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  2. leetcode97 交错字符串

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

  3. LeetCode 97. 交错字符串(动态规划)

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

  4. LeetCode 97: 交错字符串

    这里我们考虑用 s1和 s2的某个前缀是否能形成 s3 的一个前缀. 这个方法的前提建立于:判断一个 s3的前缀(用下标 k表示),能否用 s1和 s2 的前缀(下标分别为 i和 j),仅仅依赖于 s ...

  5. 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)

    目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...

  6. [Leetcode][第97题][JAVA][交错字符串][BFS][动态规划]

    [问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 f(i,j) 表示 s 1的前 i个元素和 s2 的前 j个元素是否能交错组成 s3的前 i + j 个元素 第 2 步:状态 ...

  7. 97. Interleaving String 交错字符串

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

  8. 交错字符串Python解法

    给定三个字符串 s1.s2.s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的. 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = ...

  9. 力扣刷题笔记 97. 交错字符串 C#

    7月18日签到题,题目如下: 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入:s1 = "aabcc", s2 = & ...

最新文章

  1. linux内核丢弃udp报文,c++ Linux UDP数据包丢失的原因
  2. 超图桌面版制作分段专题图学习
  3. localdate获取几个月前_关于近期使用java8中LocalDateTime的总结
  4. Python爬虫大杀器之Requests快速入门
  5. 【最近公共祖先】[COCI]STOGOVI
  6. 二进制安位处理_处理器与安​​全性之间的联系是什么?
  7. (三)java的数据类型
  8. arduino 舵机接线图_求用5个电位器分别控制舵机的arduino的原码和连线图
  9. 视频领域的Instagram:Viddy用户突破2600万
  10. fanuc 机床,加工中心通信总结,机床联网监控系统
  11. 自学python能找到工作吗-学习完Python后真的能找到工作吗?老男孩Python培训班
  12. .netcore mvc docker环境jenkins一键部署(DevOps)
  13. 《Python密码学编程》——2.6 本书的文本换行
  14. System.Web.Mvc.UrlHelper的学习与使用
  15. SATI阅读重点有哪些?
  16. smobiler php对比,Smobiler的开发讲解
  17. vue生成证书模板 并支持图片和PDF格式下载的小demo
  18. AE圣诞树(html版本),免费
  19. 前列腺穿刺活检技术发展
  20. SaaS是什么?企业采购SaaS有什么好处?

热门文章

  1. 文件操作(stat函数)
  2. 1093 字符串A+B (20 分)
  3. 1090 Highest Price in Supply Chain (25)(25 分)
  4. 系统学Android从零开始,详细的Android学习指南
  5. CMU Database Systems - Sorting,Aggregation,Join
  6. [JS 分析] 天_眼_查 字体文件
  7. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing
  8. HTTPS与MITM
  9. MFC中SQLite数据库的使用
  10. oracle数据库导入和导出