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

【问题描述】[中等]

在这里插入图片描述

【解答思路】

1. 动态规划

第 1 步:设计状态
f(i,j) 表示 s 1的前 i个元素和 s2 的前 j个元素是否能交错组成 s3的前 i + j 个元素

第 2 步:状态转移方程
在这里插入图片描述
p = i + j - 1 p为s3的长度

第 3 步:考虑初始化
boolean[][] f = new boolean[n + 1][m + 1];
f(0,0)=True
第 4 步:考虑输出
f[n][m];

第 5 步:考虑是否可以状态压缩

时间复杂度:O(NM) 空间复杂度:O(NM)

class Solution {public boolean isInterleave(String s1, String s2, String s3) {int n = s1.length(), m = s2.length(), t = s3.length();
//长度之和都不等,肯定无法由s1和s2交替组成s3if (n + m != t) {return false;}boolean[][] f = new boolean[n + 1][m + 1];
//边界条件:认为s1的前0个字符和s2的前0个字符,可以交替组成s3的前0个字符f[0][0] = true;for (int i = 0; i <= n; ++i) {for (int j = 0; j <= m; ++j) {int p = i + j - 1;if (i > 0) {//官方代码前面这个'f[i][j] ||'是没必要的f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p));}if (j > 0) {//如果前一步i>0时已算出f[i][j]为true,则下面的||会短路,f[i][j]直接就是true了f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p));}}}
//返回结果:s1的前n个字符和s2的前m个字符,可否交替组成s3的前n+m个字符return f[n][m];}
}

在这里插入图片描述

时间复杂度:O(NM) 空间复杂度:O(M)
在这里插入图片描述

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

在这里插入图片描述

时间复杂度:O(NM) 空间复杂度:O(NM)

class Solution {public boolean isInterleave(String s1, String s2, String s3) {int n1 = s1.length();int n2 = s2.length();int n3 = s3.length();if (n1 + n2 != n3) return false;//判断是否已经遍历过boolean[][] visited = new boolean[n1 + 1][n2 + 1];Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{0, 0});while (!queue.isEmpty()) {int[] tmp = queue.poll();/到达右下角就返回 trueif (tmp[0] == n1 && tmp[1] == n2) return true;/ 尝试是否能向右走if (tmp[0] < n1 && s1.charAt(tmp[0]) == s3.charAt(tmp[0] + tmp[1]) && !visited[tmp[0] + 1][tmp[1]]) {visited[tmp[0] + 1][tmp[1]] = true;queue.offer(new int[]{tmp[0] + 1, tmp[1]});}/ 尝试是否能向下走if (tmp[1] < n2 && s2.charAt(tmp[1]) == s3.charAt(tmp[0] + tmp[1]) && !visited[tmp[0]][tmp[1] + 1]) {visited[tmp[0]][tmp[1] + 1] = true;queue.offer(new int[]{tmp[0], tmp[1] + 1});}}return false;}
}

【总结】

1. 动态规划流程

第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩

2. BFS DFS 遍历好助手

转载链接:https://leetcode-cn.com/problems/interleaving-string/solution/jiao-cuo-zi-fu-chuan-by-leetcode-solution/
参考链接:https://leetcode-cn.com/problems/interleaving-string/solution/dong-tai-gui-hua-he-bfs-by-powcai/

参考链接:https://leetcode-cn.com/problems/interleaving-string/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-2-9/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Windows下的访问控制模型

在探索Windows操作系统的过程中&#xff0c;发现很多有意思 的东西。 Windows下的访问控制模型也是我在Github上浏览代码时&#xff0c;无意中发现的。 项目地址 https://github.com/Krutonium/Windows-10-Login-Background-Changer 当我们登陆Windows操作系统时&#xff0c;系…

第八期:继美商务部拉黑多家中国公司后,MIT开始审查对华AI合作项目

10 月 9 日&#xff0c;美国麻省理工学院&#xff08;MIT&#xff09;表示&#xff0c;将审查学校与商汤科技&#xff08;SenseTime Group Ltd.&#xff09;的关系&#xff0c;包括一些可能涉及出口管制法规的项目。 北京时间 10 月 8 日&#xff0c;美国商务部正式公布了新一批…

[Leetcode][第174题][JAVA][地下城游戏][DFS][动态规划]

【问题描述】[中等] 【解答思路】 1. 回溯&#xff08;暴力&#xff09;& 优化 超时&#xff0c;需要优化 public int calculateMinimumHP(int[][] dungeon) {if (dungeon null || dungeon.length 0 || dungeon[0].length 0) {return 0;}int rowLen dungeon.length;in…

第十期:快来了解这五种热门的开发技能

开发人员是热门的工作岗位之一&#xff0c;在Indeed网站的2019年最热门工作排行榜上名次靠前。随着企业对数字化转型项目的需求不断增加&#xff0c;对能够开发这些数字化应用软件的个人的需求随之而来。 开发人员是热门的工作岗位之一&#xff0c;在Indeed网站的2019年最热门工…

[剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]

【问题描述】[中等] 【解答思路】 1. 动态规划 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) class Solution {public int nthUglyNumber(int n) {int a 0, b 0, c 0;int[] dp new int[n];dp[0] 1;for(int i 1; i < n; i) {int n2 dp[a] * 2, n3 dp[…

第十二期:常用的几种大数据架构剖析

常用的几种大数据架构剖析 随着大数据技术的发展&#xff0c;数据挖掘、数据探索等专有名词曝光度越来越高&#xff0c;但是在类似于Hadoop系列的大数据分析系统大行其道之前&#xff0c;数据分析工作已经经历了长足的发展&#xff0c;尤其是以BI系统为主的数据分析&#xff0…

【大数据】获取一篇新闻的全部信息

作业要求来自于&#xff1a;https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894 给定一篇新闻的链接newsUrl&#xff0c;获取该新闻的全部信息 标题、作者、发布单位、审核、来源 发布时间:转换成datetime类型 点击&#xff1a; newsUrlnewsId(使用正则表达式re)cl…

第十五期:真相了,中台到底“出路”还是“末路”?

从 2015 年开始&#xff0c;到 2019 年现在为止&#xff0c;各大公司都在吹捧中台理念。 从 2015 年开始&#xff0c;到 2019 年现在为止&#xff0c;各大公司都在吹捧中台理念。 仿佛中台是业务复杂性的救世主&#xff0c;是某些架构师和 PM 的新出路&#xff0c;各种割韭菜的…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第27篇]什么是对称密码加密的AEAD安全定义?

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。这篇文章将从“安全定义和证明”一节开始&#xff0c;对认证加密进行简要概述。 AEAD Luke在最近的一篇文章…

第十七期:详解大数据处理中的Lambda架构和Kappa架构

在这张架构图中&#xff0c;大数据平台里面向用户的在线业务处理组件用褐色标示出来&#xff0c;这部分是属于互联网在线应用的部分&#xff0c;其他蓝色的部分属于大数据相关组件&#xff0c;使用开源大数据产品或者自己开发相关大数据组件。 典型互联网大数据平台架构 首先我…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第28篇]什么是公钥密码学的IND-CCA安全定义?

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。讨论了用于公钥加密的IND-CCA安全性。 IND-CCA安全代表选择明文的不可伪造性。这样的安全方案的思想就是给定…

玩转oracle 11g(51):select t.*,t.rowid

select t.*,t.rowid from wii_device_master t; ‘ 点开解锁 复制ctrlc crtl v加入新的值 很简单&#xff0c;sql语句后面加上for update即可&#xff1a; 但是今天遇到一种情况&#xff0c;无法对该表进行修改&#xff0c;因为这样会锁表的 下面这样写比较好&#xff0c;也…

[小技巧][Markdown]上标 /下标 上下角标

标签写法效果上标2 10 上标2 10下标H2O下标H2O //上标 2<sup> 10 </sup> 2 ^10^ //下标 H<sub>2</sub>O H~2~O//上标 2 10 2 10 //下标 H2O H2O [总结] 1.上标 sup标签 &#xff1a; <sup> 内容 </sup> ^ : ^内容^2.下标 sub标…

第十八期:专家认为对“人工智能+教育”应持审慎态度

随着人工智能不断发展,人脸识别技术被越来越多地应用于校园中。据了解,一所知名大学2019级新生“刷脸”就能瞬间完成报到程序,系统是这所学校的学生研发的,学生对着摄像头,人脸识别系统就开始进行比对,眨眼间就能完成扫描,整个报到注册手续几乎不到一秒钟。 制图/李晓军 ● 人…

图论中的基础概念总结

总结下图论中的各种基础概念 所以有部分定义直接搬运了度娘啦~ 子图设为两个图&#xff08;同为无向图或同为有向图&#xff09;&#xff0c;若且&#xff0c;则称G是G的子图&#xff0c;G是G‘的母图&#xff0c;记作&#xff0c;又若且&#xff0c;则G称是G的真子图&#xff…

[Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]

【问题描述】[困难] 【解答思路】 1. 记忆化搜索 时间复杂度&#xff1a;O(n^3) 空间复杂度&#xff1a;O(n^2) class Solution {public int[][] rec;public int[] val;public int maxCoins(int[] nums) {int n nums.length;val new int[n 2];for (int i 1; i < n; i)…

第十九期:CIO不懂老板数字化转型的目的,因为老板也不知道自己想要什么

既然不知道数字化转型的目的是什么&#xff0c;那么为什么老板会花大价钱进行数字化转型呢&#xff1f;CIO应该找到老板真正想要什么&#xff0c;一切的目的都在业务上。 据传有份权威机构说全球企业数字化转型的失败率将近80%。 但是到处都搜不到这句话的出处。我敢肯定这个数…

selenium+python自动化80-文件下载(不弹询问框)

前言 上一篇是点弹出框上的按钮去保存文件&#xff0c;本篇介绍一种更加优雅的方法&#xff0c;加载Firefox和Chrome的配置文件&#xff0c;不弹出询问框后台下载。 一、FirefoxProfile 1.点下载的时候&#xff0c;如下图&#xff0c;如果不想让它弹出这个询问框&#xff0c;可…

第二十期:想吃透监控系统,就这一篇够不够?

经济高速发展的今天&#xff0c;我们处于信息大爆炸的时代。随着经济发展&#xff0c;信息借助互联网的力量在全球自由地流动&#xff0c;于是就催生了各种各样的服务平台和软件系统。 经济高速发展的今天&#xff0c;我们处于信息大爆炸的时代。随着经济发展&#xff0c;信息借…

[Leetcode][第95题][JAVA][不同的二叉搜索树 II][递归]

【问题描述】[中等] 【解答思路】 1. 递归 复杂度 class Solution {public List<TreeNode> generateTrees(int n) {if (n 0) {return new LinkedList<TreeNode>();}return generateTrees(1, n);}public List<TreeNode> generateTrees(int start, int end…