leetcode97. 交错字符串,二维动态规划

news2024/9/22 21:19:19

leetcode97. 交错字符串

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

两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空
子字符串:
s = s1 + s2 + … + sn
t = t1 + t2 + … + tm
|n - m| <= 1
交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …
注意:a + b 意味着字符串 a 和 b 连接。

示例 1:
在这里插入图片描述
输入:s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”
输出:true

示例 2:
输入:s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”
输出:false

示例 3:
输入:s1 = “”, s2 = “”, s3 = “”
输出:true

提示:
0 <= s1.length, s2.length <= 100
0 <= s3.length <= 200
s1、s2、和 s3 都由小写英文字母组成
在这里插入图片描述

题目分析

  • 问题定义:判断字符串s3是否可以通过将字符串s1s2交错拼接而成。
  • 关键概念:通过动态规划构建一个二维数组dp,其中dp[i][j]表示s3的前i+j个字符能否由s1的前i个字符和s2的前j个字符组成。

算法介绍

  • 动态规划:使用二维数组dp来存储中间结果,以优化时间复杂度。

算法步骤

  1. 初始化动态规划数组dp,大小为(n+1) x (m+1),其中nm分别是s1s2的长度。
  2. 设置边界条件:dp[0][0] = true,表示空字符串可以由空字符串交错而成。
  3. 遍历dp数组,从第一行和第一列开始:
    • 如果i > 0s3[i+j-1] == s1[i-1],则dp[i][j] |= dp[i-1][j]
    • 如果j > 0s3[i+j-1] == s2[j-1],则dp[i][j] |= dp[i][j-1]
  4. 返回dp[n][m],即s3是否可以通过s1s2交错拼接而成。

算法流程

初始化dp数组
设置边界条件
遍历dp数组
s3 i+j-1 == s1 i-1
dp i j 或= dp i-1 j
继续
s3 i+j-1== s2 j-1
dp i j 或= dp i j-1
继续
返回dp n m

算法代码

//dp[i][j]表示s3的第i+j个字符能否被s1的前i个字符和s2的前j个字符组成
//s3[i+j-1]==s1[i-1] dp[i][j]|=(dp[i-1][j])
//s3[i+j-1]==s2[j-1] dp[i][j]|=(dp[i][j-1])

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
    int n=s1.size();
    int m=s2.size();
    if(n+m!=s3.size()) return false;
    vector<vector<int>> dp(n+1,vector<int>(m+1,false));
    dp[0][0]=true;
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=m;j++)
        {
            if(i>0 && s3[i+j-1]==s1[i-1])
            {
                dp[i][j]|=(dp[i-1][j]);
            }
            if(j>0 && s3[i+j-1]==s2[j-1])
            {
                dp[i][j]|=(dp[i][j-1]);
            }
        }
    }
    return dp[n][m];
    }
};

算法分析

  • 时间复杂度:O(n*m),其中n和m分别是s1s2的长度。
  • 空间复杂度:O(n*m),用于存储动态规划数组。
  • 易错点:正确处理字符串匹配和动态规划数组的更新。

相似题目

题目链接
97. 交错字符串LeetCode
1143. 最长公共子序列LeetCode
300. 最长递增子序列LeetCode

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

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

相关文章

Jedis 操作 Redis 数据结构全攻略

Jedis 操作 Redis 数据结构全攻略 一 . 认识 RESP二 . 前置操作2.1 创建项目2.2 关于开放 Redis 端口的问题2.2.1 端口转发?2.2.2 端口配置 2.3 连接到 Redis 服务器 三 . 通用命令3.1 set 和 get3.2 exists 和 del3.3 keys3.4 expire、ttl、type 三 . string 相关命令3.1 mse…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

高级组件封装技巧--tree的封装

el-tree是一个经常用到的组件&#xff0c;但是它不支持v-model,使用起来很麻烦&#xff0c;这篇教程封装了el-tree,使得它使用起来很简单&#xff0c;并且支持搜索&#xff0c;支持叶子节点横向排列&#xff0c;这样就算数据多了&#xff0c;也会显的很紧凑,同时它支持提交half…

springboot+mybatis+vue2分页功能开发

前端框架代码 <div class"block"><span class"demonstration">完整功能</span><el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"currentPage4":page-s…

MLM:多模态大型语言模型的简介、微调方法、发展历史及其代表性模型、案例应用之详细攻略

MLM&#xff1a;多模态大型语言模型的简介、微调方法、发展历史及其代表性模型、案例应用之详细攻略 目录 相关文章 AI之MLM&#xff1a;《MM-LLMs: Recent Advances in MultiModal Large Language Models多模态大语言模型的最新进展》翻译与解读 MLM之CLIP&#xff1a;CLIP…

Draw.io for Mac/Win:免费且强大的流程图绘制工具

在数字化时代&#xff0c;流程图已成为表达复杂过程和逻辑关系的重要工具。Draw.io&#xff08;现也称为diagrams.net&#xff09;&#xff0c;作为一款免费且功能强大的流程图绘制工具&#xff0c;无论是对于Mac还是Windows用户&#xff0c;都是不可多得的选择。 一、跨平台兼…

计算机毕业设计 半成品配菜平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

智能电网中巡检机器人的信息安全技术应用

随着电力行业的数字化和智能化发展&#xff0c;智能巡检机器人作为电力系统自动化运维的重要工具&#xff0c;能够在无人干预的情况下&#xff0c;对电网设备进行实时监测和故障诊断。这种高效、可靠的巡检方式在智能电网建设中发挥了重要作用。然而&#xff0c;随着机器人在电…

yolo 3d车辆目标检测(教程+代码)

关于3D目标检测及其与YOLO3D相关性的概览&#xff1a; 3D目标检测&#xff1a;开启视觉感知的新维度 随着计算机视觉技术的发展&#xff0c;目标检测算法已经成为人工智能领域的重要组成部分。从自动驾驶汽车到无人机导航&#xff0c;再到增强现实&#xff08;AR&#xff09;应…

Java项目:137 springboot基于springboot的智能家居系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本基于Springboot的智能家居系统提供管理员、用户两种角色的服务。 总的功能个人中心、基础数据管理、家具管理、任务管理和用户管理。本系统…

计算机工具软件安装攻略:Visual Studio Code下载、安装和使用

Visual Studio Code下载、安装和使用 1 Visual Studio Code简介 Visual Studio Code通常简称为VS Code&#xff0c;是一款由微软开发的免费、开源的轻量级代码编辑器。它在开发者社区中非常受欢迎&#xff0c;具有强大的功能和扩展性&#xff0c;适用于多种编程语言和开发场景…

git如何设置嵌套仓库(设置子树或子模块),并解决直接将一个仓库拖拽到另一个仓库中导致的问题

git 将一个仓库拷贝到另一个仓库的文件夹下。默认git并不会处理&#xff0c;上传上去之后&#xff0c;只会创建一个文件夹&#xff0c;但是这个文件夹点不开。 在 git add . 的时候&#xff0c;会报出警告&#xff1a; 警告&#xff1a;正在添加嵌入式 git 仓库&#xff1a;cl…

微链接: 利用 MinIO 实现计算和存储的还原

Microblink 是一家专门从事图像检测的 AI 公司。他们从 BlinkID、BlinkID Verify 和 BlinkCard 等产品开始进入身份空间。最近&#xff0c;他们的图像检测能力催生了可以处理其他类型图像的产品。例如&#xff0c;可以对收据执行产品检测&#xff0c;从而使用收据上的产品描述来…

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意&#xff1a;将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景&#xff1a; I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12-01-preview is available a…

【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS

目录 AbstractINTRODUCTIONBACKGROUNDARMv8 ArchitectureSecurity statesTrustZone extensionsVirtualization Communication with Peripherals MOTIVATIONATTACK MODEL AND ASSUMPTIONSYSTEM DESIGNOverviewExecution Environments IsolationDMA FilterExternal DMA controlle…

负载均衡--资源申请说明(三)

1.负载方式&#xff1a;分为四层负载和七层负载 2.负载协议&#xff1a;四层负载为TCP和UDP&#xff0c;七层负载为HTTP和HTTPS 4.负载端口&#xff1a;填写虚地址的端口&#xff08;一般与后端服务端口保持一致&#xff09; 5.真实服务IP&#xff1a;指被负载的后台真实服务…

零售自动化新趋势:AI 智能名片与 S2B2C 商城系统助力零售业变革

摘要&#xff1a;本文深入探讨零售业所面临的多重压力&#xff0c;分析客户期望不断提高的现状&#xff0c;强调零售商追求自动化的必要性。引入零售自动化的概念&#xff0c;阐述其通过技术实现零售体验自动化或半自动化&#xff0c;提供线上线下无缝连接、快速和个性化体验的…

MATLAB实现跳频多频移键控通信系统仿真

1. 简介 在现代无线通信系统中&#xff0c;跳频技术和多频移键控&#xff08;MFSK&#xff09;调制被广泛应用于抗干扰和提高通信系统性能。本文将通过 MATLAB 仿真分析跳频 MFSK 通信系统的性能&#xff0c;特别是在不同信道干扰条件下的误码率&#xff08;BER&#xff09;表…

ultralytics框架实现ByteTrack目标追踪算法

在ultralytics框架中&#xff0c;提供了两种用于目标追踪的算法&#xff0c;分别是ByteTrack算法与Botsort算法&#xff0c;这两种算法都是在Sort算法的基础上改进的&#xff0c;今天&#xff0c;我们学习一下ByteTrack算法。 存在问题 首先&#xff0c;我们看下ByteTrack所解…

《数字信号处理》学习04-离散时间系统中的线性时不变系统

目录 一&#xff0c;系统及离散时间系统 二&#xff0c;离散时间系统中的线性时不变系统 1&#xff0c;线性系统 1) 可加性 2) 比例性(齐次性) 3&#xff09;叠加原理(叠加性质) 2&#xff0c;时不变系统(移不变系统) 通过前几篇文章的学习&#xff0c;此时我对序列的相关概…