97. 交错字符串-----回溯、动态规划

题目链接

97. 交错字符串 - 力扣(LeetCode)

解答

递归回溯

        题目所述为两个字符串交替组成第三个字符串,之前好像做过相似的题目,直接联想到可以考虑使用递归回溯的做法,让字符串s1和字符串s2分别作为起始字符串,依次列举所有的情况,直至返回正确答案,或者回溯退出。

举例说明:如题目所言s1 = "aabcc",s2 = "dbbca",s3 = "aadbbcbcac";

        若s1为起始字符串,s1[0] == s3[0],此时下一位的情况可以为s1[1]或者s2[0]与s3[1]进行比较。

        若s2为起始字符串,由s2[0] != s3[0],所以s2不能作为匹配成功,下一位的情况只能为s1[0]与s3[0]进行比较。

        参考代码如下:

class Solution {public int len1, len2, len3;public String s1, s2, s3;public boolean isInterleave(String s1, String s2, String s3) {int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();if(len1 + len2 != len3)   return false;this.len1 = len1;   this.len2 = len2;  this.len3 = len3;this.s1 = s1;       this.s2 = s2;      this.s3 = s3;return backTrack(0, 0, 0, 1) || backTrack(0, 0, 0, -1);}// flag作为标志位,为1时利用s1和s3进行匹配,为-1时利用s2与s3进行匹配public boolean backTrack(int i, int j, int k, int flag){if(i == len1 && j == len2 && k == len3) return true;if(flag == 1){// 要穷举所有的情况,所以从i下标遍历到和s3对应字符不想等为止for(int start = i; start < len1; start++){if(s1.charAt(start) != s3.charAt(k + start - i))    break;if(backTrack(start + 1, j, k + start + 1 - i, -flag))  return true;}}else if(flag == -1){for(int start = j; start < len2; start++){if(s2.charAt(start) != s3.charAt(k + start - j))    break;if(backTrack(i, start + 1, k + start + 1 - j, -flag))  return true;}}return false;}
}

         以上递归回溯做法存在问题,最后一个测试用例不能通过。查看题解后参考如下动态规划做法。

动态规划

        

        本体动态规划dp[i][j] 表示s1的前i个字符和s2的前j个字符是否可以组成s3的前i + j个字符。如果可以则dp[i][j] = true,否则dp[i][j]  = false。

        target 的每个字符都是从 s1(向下)或者 s2(向右)拿到的,所以只要判断是否存在这条 target 路径即可;

参考代码如下:

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

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SiC MOSFET之寄生电容

1.什么是寄生电容 咱们平常意义上的电容指的是大多给人的印象是两个极板&#xff0c;中间有绝缘介质&#xff0c;加上电压之后有电荷的积累&#xff0c;这可以称得上是电容。经过最近的学习&#xff0c;我对电容有了一些新的认识&#xff0c;可能很简单&#xff0c;浅浅分享一下…

【校园生活小程序_超详细部署】

校园生活小程序 1 完整小程序源码2 运行环境3 初次运行3.1 启动后端程序3.1.1 导入项目&#xff0c;找到项目的pom.xml文件&#xff0c;点击ok进行打开。3.1.2 创建数据库并插入内容 3.1.3 配置项目结构信息3.1.4 配置Tomcat服务器3.1.5 正式启动后端项目3.1.6出现BUG3.1.7 解决…

wordpress增加谷歌分析

wordpress增加谷歌分析 为了更好的浏览体验&#xff0c;欢迎光顾勤奋的凯尔森同学个人博客 http://www.huerpu.cc:7000 一、创建谷歌分析账号与媒体应用 谷歌分析地址&#xff1a;https://analytics.google.com/analytics 创建一个账号&#xff0c;如果你没有的话。 在该账…

Linux提权--定时任务--打包配合 SUID(本地)文件权限配置不当(WEB+本地)

免责声明:本文仅做技术交流与学习... 目录 定时任务 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 实战发现: 定时任务 文件权限配置不当-WEB&本地 操作演示: 定时任务 打包配合 SUID-本地 原理: 提权通过获取计划任务执行文件信息进行提权 . 1、相对路径和…

软考--信息系统项目管理师课程笔记

第一章 信息化发展 1.国家信息化&#xff1a;应用&#xff08;上&#xff09;&#xff0c;技术&#xff08;下&#xff09;&#xff0c;人才&#xff08;左&#xff09;&#xff0c;规范&#xff08;右&#xff09; 2.广域网协议包括&#xff1a;ISDN&#xff0c;ASDL&#xf…

【Ubuntu】apt命令安装最新版本Nginx

目录 环境前言添加Nginx仓库步骤1、仓库公钥2、文本公钥转二进制GPG公钥&#xff08;可选&#xff09;3、添加apt软件源4、安装新版Nginx 参阅 环境 Ubuntu 22.04 前言 ubuntu官方apt软件仓库&#xff08;或者叫软件源&#xff09;的软件版本可能会比较旧&#xff0c;导致无…

Linux网络编程】传输层中的TCP和UDP(UDP篇)

【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09; 目录 【Linux网络编程】传输层中的TCP和UDP&#xff08;UDP篇&#xff09;传输层再谈端口端口号范围划分认识知名端口号netstatiostatpidofxargs UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲数据UDP使…

贪吃蛇——C语言实践

目录 1. 游戏效果演示 2. 课程目标 3.项目适合对象 4.技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCurs…

简单贪吃蛇的实现

贪吃蛇的实现是再windows控制台上实现的&#xff0c;需要win32 API的知识 Win32 API-CSDN博客https://blog.csdn.net/bkmoo/article/details/138698452?spm1001.2014.3001.5501 游戏说明 ●地图的构建 ●蛇身的移动&#xff08;使用↑ . ↓ . ← . → 分别控制蛇的移动&am…

图片逐层矢量化

摘要 图像光栅化是计算机图形学中一个成熟的技术&#xff0c;而图像向量化&#xff0c;即光栅化的逆过程&#xff0c;仍然是一个主要的挑战。最近&#xff0c;基于深度学习的先进模型实现了向量化和向量图的语义插值&#xff0c;并展示了生成新图形的更好拓扑结构。然而&#…

在vue3中,如何优雅的使用echarts之实现大屏项目

前置知识 效果图 使用技术 Vue3 Echarts Gasp Gasp&#xff1a;是一个 JavaScript动画库,它支持快速开发高性能的 Web 动画。在本项目中&#xff0c;主要是用于做轨迹运动 所需安装的插件 npm i echarts npm i countup.js 数字滚动特效 npm i gsap javascript动画库 np…

适合优化yaml文件编辑效果的.vimrc简单配置

yaml文件编辑最重要的就是缩进对齐&#xff08;一个tab键对应2个空格&#xff09;&#xff0c;最后加上添加横&#xff0c;纵线的效果 某xx.yaml文件或者xx.yml在vim编辑器中效果如图所示&#xff1a;&#xff1a; 简单的~/.vimrc文件配置内容&#xff1a; vim ~/.vimrc set…

2024中国(重庆)人工智能展览会8月举办

2024中国(重庆)人工智能展览会8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 【报名I59交易会 2351交易会 9466】 展会背景&#xff1a; 2024中国航空科普大会暨第八届全国青少年无人机大赛在…

JVM的原理与性能

1 JVM 内存结构 1.1 运行时数据区 1.1.1 栈&#xff08;虚拟机栈&#xff09; 每个线程在创建时都会创建一个私有的Java虚拟机栈&#xff0c;在执行每个方法时都会打包成一个栈帧&#xff0c;存储了局部变量表、操作数栈、动态链接、方法出口等信息&#xff0c;然后放入栈中。…

MF自定义控件方法

在MFC中&#xff0c;您可以通过自定义控件来实现特定的用户界面元素或功能&#xff0c;以满足您的应用程序需求。自定义控件通常是从CWnd类派生的子类&#xff0c;您可以在其中重写绘制、处理事件等方法&#xff0c;以实现您想要的功能和外观。以下是一般步骤&#xff1a; 创建…

Linux 操作系统MySQL 数据库1

1.MySQL 数据库 数据库是“按照数据结构来组织、 存储和管理数据的仓库”。 是一个长期存储在计算机内的、 有组织的、 可共享的、 统一管理的大量数据的集合。 它的存储空间很大&#xff0c; 可以存放百万条、 千万条、 上亿条数据。 但是数据库并不是随意地将数据进行…

在另外一个页面,让另外一个页面弹框显示操作(调佣公共的弹框)

大概意思是&#xff0c;登录弹框在另外一个页面中&#xff0c;而当前页面不存在&#xff0c;在当前页面中判断如果token不存在&#xff0c;就弹框出登录的弹框 最后一行 window.location.href … 如果当前用户已登录&#xff0c;则执行后续操作(注意此处&#xff0c;可不要)

哈希表Hash table

哈希表是根据关键码的值而直接进行访问的数据结构。 数组就是⼀张哈希表。 哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff0c;如下图所示&#xff1a; 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断⼀个元素是…

Git Bash和Git GUI设置中文的方法

0 前言 Git是一个分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。一般默认语言为英文&#xff0c;本文介绍修改Git Bash和Git GUI语言为中文的方法。 1 Git Bash设置中文方法 &#xff08;1&#xff09;鼠标右键&#xff0c;单击“Git B…

redis深入理解之实战

1、SpringBoot整合redis 1.1 导入相关依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId&g…