3.5 力扣 交错字符串

news2025/1/18 3:20:14

97. 交错字符串

给定三个字符串 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

思路一:

首先想到双指针的方法,从s1,s2对s3进行字符逐个匹配,并且需要进行回溯(考虑该字符匹配给s1、s2两种情况)。

1.dfs结束情况:

s3的size为空时

2.递归

将当前s3[i]匹配给s1后,递归s1.substr(s1Index+1),s2,s3.substr(i+1)),匹配给s2也类似

class Solution {
public:
    bool dfs(const string& s1,const  string& s2,const string& s3){
        if(s1.size()+s2.size()!=s3.size()) return false;
        else if(s3.size()==0) return true;
        int s1Index=0,s2Index=0;
        for(int i=0;i<s3.size();i++)
        {
            if(s1Index<s1.size()&&s1[s1Index]==s3[i])
            {
                //当前i匹配给s1
                if(dfs(s1.substr(s1Index+1),s2,s3.substr(i+1))) return true;
            }
            if(s2Index<s2.size()&&s2[s2Index]==s3[i])
            {
                //当前i匹配给s2
                if(dfs(s1,s2.substr(s2Index+1),s3.substr(i+1))) return true;
            }
            else return false;
        }
        return true;
    }
    bool isInterleave(string s1, string s2, string s3) {
        return dfs(s1,s2,s3);
    }
};

能通过测试的部分情况,但提交后有内存限制

思路二:

动态规划

1.dp状态描述:定义dp[i][j]表示s1前i个 s2前j个字符能否与s3 i+j个字符匹配成功

2.递推公式:

dp[i][j]主要有两种情况,1.新元素分配给s1 2.新元素分配给s2

dp[i][j]=( dp[i-1][j] && s3[i+j-1]==s1[i-1]) || ( dp[i][j-1] && s3[i+j-1]==s2[j-1] )

3.初始状态:dp[0][0](s1 s2 s3 都为空时)

dp[i][0] s1单独与s3是否完全匹配

dp[0][j] s2单独与s3是否完全匹配

4.返回值dp[s1.size()][s2.size()]

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        if(s1.size()+s2.size()!=s3.size()) return false;
        else if(s3.size()==0) return true;
        else if(s1.size()==0) return s2==s3;
        else if(s2.size()==0) return s1==s3;
        //定义dp[i][j]表示s1前i个 s2前j个字符能否与s3 i+j个字符匹配成功
        //递推公式:第i+j个字符匹配给s1[i]或s2[j]且dp[i-1][j]或dp[i][j-1]要是true
        //dp[i][j]=( dp[i-1][j] && s3[i+j-1]==s1[i-1]) || ( dp[i][j-1] && s3[i+j-1]==s2[j-1] )
        vector<vector<bool>> dp(s1.size()+1,vector<bool>(s2.size()+1,false));
        dp[0][0]=true;
        //如果有匹配不上,那整行或列都是false
        for(int i=1;i<=s1.size();i++)
        {
            dp[i][0]= s1[i-1]==s3[i-1];
            
            if(!dp[i][0]) break;
        }
        for(int i=1;i<=s2.size();i++)
        {
            dp[0][i]= s2[i-1]==s3[i-1];
            if(!dp[0][i]) break;
        }
        for(int i=1;i<=s1.size();i++)
        {
            for(int j=1;j<=s2.size();j++)
            {
                dp[i][j]=( dp[i-1][j] && s3[i+j-1]==s1[i-1]) || ( dp[i][j-1] && s3[i+j-1]==s2[j-1] );
            }
        }
        return dp[s1.size()][s2.size()];
    }
};

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

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

相关文章

基于springboot+vue的经方药食两用服务平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Vmware创建共享文件夹

具体设置步骤如下&#xff1a; 打开 “设置 -> 选项 -> 共享文件夹” 点击 “选项 -> 共享文件夹 ->选择总是开启 ->添加” 添加共享文件夹 选择主机路径和设置名称 选择启用此共享&#xff0c;并且点击完成退出。 挂载操作 在root用户下执行具体命令如下&…

HTTP有什么缺陷,HTTPS是怎么解决的

缺陷 HTTP是明文的&#xff0c;谁都能看得懂&#xff0c;HTTPS是加了TLS/SSL加密的&#xff0c;这样就不容易被拦截和攻击了。 SSL是TLS的前身&#xff0c;他俩都是加密安全协议。前者大部分浏览器都不支持了&#xff0c;后者现在用的多。 对称加密 通信双方握有加密解密算法…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…

FX110网:不明缘由!汇友在Vantage平台出金数月未果!

早在2021年1月&#xff0c;Vantage FX已宣布正是退出中国大陆市场。这三年多时间里&#xff0c;Vantage FX从未放出恢复中国大陆市场业务的消息&#xff0c;事实上&#xff0c;在Vantage相关联的几个实体网站中&#xff0c;也多会声明“不向中国的居民提供服务”&#xff0c;但…

【开源物联网平台】FastBee使用EMQX5.0接入步骤

​&#x1f308; 个人主页&#xff1a;帐篷Li &#x1f525; 系列专栏&#xff1a;FastBee物联网开源项目 &#x1f4aa;&#x1f3fb; 专注于简单&#xff0c;易用&#xff0c;可拓展&#xff0c;低成本商业化的AIOT物联网解决方案 目录 一、将java内置mqtt broker切换成EMQX5…

【Web - 框架 - Vue】随笔 - Vue的简单使用(02) - 快速上手

【Web - 框架 - Vue】随笔 - Vue的简单使用(02) - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue模板</title> </head> <body> <div id"…

python转换json

import json import os from enum import Enumclass LaneDirectionType(int, Enum):LaneDirectionType_Unknown -1 # 类型未知OneWay 1 # 单向TwoWay 2 # 双向# 颜色类型 class ColorCombo(int, Enum):NOUSE 0 # 默认值UNKNOWN 1000 # 未定义WHITE 1 # 白色(默认值…

【YOLO v5 v7 v8 v9小目标改进】辅助超推理SAHI:分而治之,解决高分辨率图像中小物体检测的问题

辅助超推理SAHI&#xff1a;分而治之&#xff0c;解决高分辨率图像中小物体检测的问题 设计思路结构小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 论文&#xff1a;https://arxiv.org/pdf/2202.06934.pdf 代码&#xff1a;https://github.com/obss/sahi 设计思…

造极宋韵:大麗和和全新城市系列

中国美学,造极于宋。杭州,一座生活在宋画里的城市,一座繁华与优雅交织的华贵天城。 钱塘自古繁华,温润华贵的丝绸与漆器,诉说这座城市底蕴深藏的华贵;湖上雨霁,山水涳濛,油纸伞与石拱桥,描绘杭州空灵雅逸的自然山水;比德于玉,谦和含章,玉琮与礼玉文化,象征玉成和合的城市气质。…

管理类联考--复试--面试问题--底层逻辑

文章目录 了解面试官提问问题的背后逻辑&#xff0c;在面试时遇到&#xff0c;即使不懂&#xff0c;也能往边边靠近哈一句顶一万句自我介绍 了解面试官提问问题的背后逻辑&#xff0c;在面试时遇到&#xff0c;即使不懂&#xff0c;也能往边边靠近哈 “你最有挑战性的事是啥”…

开源工业软件:SCADA系统开源

PyScada是一个开源的scada系统 源代码地址 http://www.gitpp.com/huangtomy/pyscada-cn SCADA系统是Supervisory Control And Data Acquisition的缩写&#xff0c;即数据采集与监视控制系统。它是以计算机为基础的DCS与电力自动化监控系统&#xff0c;应用领域非常广&#x…

nginx代理参数proxy_pass

proxy_pass参数用于配置反向代理&#xff0c;指定客户端请求被转发到后端服务器&#xff0c;后端地址可以是域名、ip端口URI 代理后端报错提示本地找不到CSS文件、JavaScript文件或图片 例如&#xff1a; nginx &#xff1a;10.1.74.109 后端服务&#xff1a;http://10.1.74.…

Github 2024-03-07 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4C++项目3C#项目1TypeScript项目1非开发语言项目1HTML项目1CSS项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Pyt…

vscode中eslint插件不生效问题

case: 最近使用webpack打包js资源中使用到了VS Code中的eslint插件辅助eslint plugin对代码进行校验&#xff0c;在.eslintrc.js文件中以及webpack.config.js配置好后&#xff0c; 在控制台运行npx webpack可以读取到eslint plugin的检测结果 一、eslint插件读取项目中.eslint…

下载无水印抖音视频

在抖音看到某些视频想下载&#xff0c;却出现无法保存在本地【显示"作品暂时无法保存,链接已复制"】。或者下载的视频有水印。 而某些微信小程序下载可能需要付费或者有水印。其实我们可以直接使用电脑浏览器直接下载。 举个例子: 这是来自王道官方账号的一条视频链…

小程序环形进度条爬坑

在做微信小程序的时候&#xff0c;发现用canvas做的环形进度条&#xff0c;在带滚动条的view里面显示有闪动、显示不全的问题&#xff0c;后面改成echart-weixin的pie图实现了&#xff0c;option配置如下 // 表示进度的百分比 var progressValue 70;option {series: [{type: …

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.M…

Sqoop “hcatalog does not exist!” 提示信息消除方法

sqoop运行的时候老是有这个报错提示&#xff0c;看着可烦&#xff0c;解决消除一下 解决方法&#xff1a; 1、在$SQOOP_HOME/bin目录下面修改configure-sqoop文件 1&#xff09;进文件夹 cd /training/sqoop-1.4.7/bin2&#xff09;编辑文件 vi /configure-sqoop3&#xff…

区块链媒体套餐:精益求精链游媒体宣发推广7个关键细节分享-华媒舍

在如今竞争激烈的游戏行业&#xff0c;一款优秀的游戏缺乏有效的宣发推广&#xff0c;很难脱颖而出。而随着区块链技术的兴起&#xff0c;链游媒体的宣发推广成为游戏开发者和运营商的重要选择之一。本文将为大家介绍精益求精的链游媒体宣发推广的七个关键细节。 1. 定位目标受…