力扣97. 交错字符串

动态规划

  • 思路:
    • 假设 dp[i][j] 是 s1 前 i 个元素和 s2 前 j 个元素能否交错构成 s3 的状态;
    • 则其上一个状态有:
      • dp[i - 1][j] 且 s1[i -1] == s3[i + j - 1] 条件决定了状态 dp[i][j];
      • 或者 dp[i][j - 1] 且 s2[j - 1] == s3[i + j - 1] 条件决定了状态 dp[i][j];
    • 边界条件 dp[0][0] = true;
    • 所有以上的前提是 s1 与 s2 长度和是 s3 的长度;
    • 注意边界情况 i = 0,j = 0 时,上一状态情况只有一种;
class Solution {
public:bool isInterleave(string s1, string s2, string s3) {int sz1 = s1.size();int sz2 = s2.size();int sz3 = s3.size();if (sz1 + sz2 != sz3) {return false;}auto dp = std::vector<std::vector<int>>(sz1 + 1, std::vector<int>(sz2 + 1, false));dp[0][0] = true;for (int i = 0; i <= sz1; ++i) {for (int j = 0; j <=sz2; ++j) {int k = i + j - 1;if (i > 0) {dp[i][j] |= (dp[i - 1][j] &&(s1[i - 1] == s3[k]));}if (j > 0) {dp[i][j] |= (dp[i][j - 1] && (s2[j - 1] == s3[k]));}}} return dp[sz1][sz2];}
};
  • 将上面的代码换成之前(翻看专栏之前动态规划的文章)熟悉的模板步骤(待总结):
class Solution {
public:bool isInterleave(string s1, string s2, string s3) {int sz1 = s1.size();int sz2 = s2.size();int sz3 = s3.size();if (sz1 + sz2 != sz3) {return false;}auto dp = std::vector<std::vector<bool>>(sz1 + 1, std::vector<bool>(sz2 + 1, false));dp[0][0] = true;for (int i = 1; i <= sz1; ++i) {dp[i][0] = (dp[i - 1][0] && (s1[i - 1] == s3[i - 1]));}for (int j = 1; j <= sz2; ++j) {dp[0][j] = (dp[0][j - 1] && (s2[j - 1] == s3[j - 1]));}for (int i = 1; i <= sz1; ++i) {for (int j = 1; j <=sz2; ++j) {int k = i + j - 1;int con1 = (dp[i - 1][j] &&(s1[i - 1] == s3[k]));int con2 = (dp[i][j - 1] && (s2[j - 1] == s3[k]));dp[i][j] = (con1 || con2);}} return dp[sz1][sz2];}
};

​​​​​​​

  • 好像可以用滚动数组来优化空间复杂度,待后面进一步研究;

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

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

相关文章

C语言:猜数字游戏

#include<stdio.h> #include<time.h> #include<stdlib.h> void menu() {printf("********************************\n");printf("****** 1.开始 2.退出 ******\n");printf("********************************\n"); } voi…

tp中的调试模式

ThinkPHP有专门为开发过程而设置的调试模式&#xff0c;开启调试模式后&#xff0c;会牺牲一定的执行效率&#xff0c;但带来的方便和除错功能非常值得。 我们强烈建议ThinkPHP开发人员在开发阶段始终开启调试模式&#xff08;直到正式部署后关闭调试模式&#xff09;&#xf…

JDK8接口新增的方法

前言 在JDK8之前接口中的方法是不能有方法体的&#xff0c;但是在JDK8之后 为什么要新增这三个接口 增强接口能力&#xff0c;便于项目的扩展和维护把功能卸载接口中便于直接调用&#xff0c;如果要修改直接修改接口中的方法就可以 一&#xff0c;默认方法 必须使用default修饰…

Swin-Transformer 在图像识别中的应用

1. 卷积神经网络简单介绍 图像识别任务主要利用神经网络对图像进行特征提取&#xff0c;最后通过全连接层将特征和分类个数进行映射。传统的网络是利用线性网络对图像进行分类&#xff0c;然而图像信息是二维的&#xff0c;一般来说&#xff0c;图像像素点和周围邻域像素点相关…

2机5节点系统潮流MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 电力系统潮流计算是电力系统最基本的计算&#xff0c;也是最重要的计算。所谓潮流计算&#xff0c;就是已知电网的接线方式与参数及运行条件&#xff0c;计算电力系统稳态运行各母线电压、各支路电流、功率及…

接口自动化测试实操【设置断言思路】

1 断言设置思路 这里总结了我在项目中常用的5种断言方式&#xff0c;基本可能满足90%以上的断言场景&#xff0c;具体参见如下脑图&#xff1a; 在这里插入图片描述 下面分别解释一下图中的五种思路&#xff1a; 1&#xff09; 响应码 对于http类接口&#xff0c;有时开发人…

Spring AOP 和 Spring Boot 统一功能处理

文章目录 Spring AOP 是什么什么是 AOPAOP 组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 实现 Spring AOP添加 Spring AOP 框架支持execution表达式定义切面、切点…

快速入门:使用 .NET Aspire 组件实现缓存

前言 云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.NET Aspire 组件简化了连接到流行的缓存服务&#xff08;例如 Redis&#xff09;的过程&#xff0c;今天小编就为大家简单介绍一下如何使用 .NET Aspire 组件实现缓存。 本文的内容概要&#xff1a; 创…

Docker构建镜像时空间不足:/var/lib/docker,no space left on device

背景 在一次更新业务服务功能后&#xff0c;重新在服务器上构建微服务镜像&#xff0c;在构建镜像时报错空间不足&#xff1a; /var/lib/docker, no space left on device 赶紧用 df -h 看了下磁盘使用情况&#xff0c;果然&#xff0c; devicemapper 已经满了。。由于需要紧急…

使用Pytorch从零开始构建LoRA

引言 在这篇博文中&#xff0c;我将向大家展示如何使用Pytorch从头开始构建 LoRA。LoRA 是Low-Rank Adaptation或Low-Rank Adapters的缩写&#xff0c;它提供了一种高效且轻量级的方法来微调预先存在的语言模型。这包括BERT和RoBERTa等掩码语言模型&#xff0c;以及GPT、Llama…

基于循环神经网络长短时记忆(RNN-LSTM)的大豆土壤水分预测模型的建立

Development of a Soil Moisture Prediction Model Based on Recurrent Neural Network Long Short-Term Memory in Soybean Cultivation 1、介绍2、方法2.1 数据获取2.2.用于预测土壤湿度的 LSTM 模型2.3.土壤水分预测的RNN-LSTM模型的建立条件2.4.预测土壤水分的RNN-LSTM模型…

蓝桥杯专题-真题版含答案-【三角螺旋阵】【干支记年法】【异或加密法】【金字塔】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

开源的Spring Boot学习资源

1 javaboy-video-samples 整合了 Spring Boot 使用的各种示例&#xff0c;以最简单、最实用为标准&#xff0c;每个示例也都以最小依赖&#xff0c; 最简单为标准&#xff0c;帮助初学者快速掌握 Spring Boot 各组件的使用&#xff0c;基本上涉及到了 Spring Boot 使用的方方…

内网渗透测试基础——Windows PowerShell篇

内网渗透测试基础——Windows PowerShell篇 1. Windows PowerShell基础 Windows PowerShell是一种命令行外壳程序和脚本环境&#xff0c;它内置在每个受支持的Windows版本中&#xff08;Windows7、Windows Server 2008 R2及更高版本&#xff09;&#xff0c;为Windows命令行使…

怎么使用会声会影?2024年最新使用会声会影的具体步骤

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署&#xff08;Docker&#xff09;一&#xff1a;拉取 OceanBase 数据库相关镜像二&#xff1a;启动 OceanBase 数据库实例完整启动日志展示 三&#xff1a;连接实例遇到报错&#xff1a;没有mysql客户端 …

目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】图像分类

目录 前言 知识储备 图像分类基础知识 1.具体领域划分 2.图像分类问题的3层境界

Appium:一款强大的移动应用自动化测试工具

引言&#xff1a; 随着移动应用的普及和功能的不断增加&#xff0c;测试成为了确保应用质量和用户体验的重要环节。传统的手动测试方法已经无法满足日益增长的需求&#xff0c;因此自动化测试工具应运而生。在众多自动化测试工具中&#xff0c;Appium以其跨平台、开源和灵活性而…

php查询数据库,并通过表格展示

第一步&#xff1a;创建数据库 创建一个数据库php-crud 第二步&#xff1a;创建数据库表 在数据库php-crud下创建一个歌曲表song /*Navicat Premium Data TransferSource Server : MariaDBSource Server Type : MariaDBSource Server Version : 100605 (10.6.5-M…

【Python】【PyPi】搭建本地PyPi镜像源

文章目录 一、PyPi二、配置步骤2.1 安装pip2pi2.2 下载模块包到本地2.3 创建链接2.4 部署web服务2.5 web访问 三、使用本地镜像源来安装模块四、总结 一、PyPi PyPi&#xff0c;Python Package Index&#xff0c;Python包索引&#xff0c;一般是指由Python社区维护的Python软件…