leetcode (力扣) 97. 交错字符串(动态规划)

news2024/9/28 13:19:09

文章目录

  • 题目描述
  • 思路分析
  • 完整代码

题目描述

给定三个字符串 s1、s2、s3,请你帮忙验证 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

思路分析

动规题。

1.确定dp数组含义:
dp[i][j] 表示s1前i个字符和s2前j个字符能否构成s3的前i+j个字符。

2.分析递推公式:

由于需要s1+s2来构成s3,所以设想子问题s3的最后一个字符是由谁构成的。

  • 若s3的最后一个字符由s1提供,则有:s3[i+j] = s1[i],而 s3 此前的 i+j−1个字符,可由 s1 的前 i−1 字符和 s2 的前 j 个字符共同提供。这时候就要去判断dp数组的上一个状态了,即若 dp[i−1][j]为真,则 dp[i][j]为真。
  • 若s3最后一个字符由s2提供,则同理
     if s1[i-1] == s3[i+j-1] and dp[i-1][j]:
         dp[i][j] = True
     if s2[j-1] == s3[i+j-1] and dp[i][j-1]:
         dp[i][j] = True

别忘了 dp[i][j] 表示s1前i个字符(不包含i)

3.初始化

由于为了方便,所以数组都从下标1开始。
在初始化的时候 多开一行一列的dp数组。

必有:dp [0][0] = True。

dp的第二行和第二列也需要初始化,就直接比较当前s1或者s2字符和当前的s3字符是否相等,如果相等,看看前一个dp位置是否也是True,如果是则当前dp位置也是True。

for i in range(1, n + 1):
    dp [i][0] = dp [i - 1][0] and s1[i - 1] == s3[i - 1]
for i in range(1, m + 1):
    dp [0][i] = dp [0][i - 1] and s2[i - 1] == s3[i - 1]

完整代码

class Solution:
    def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
        # dp[i][j] 表示s1前i个字符和s2前j个字符能否构成s3的前i+j个字符

        n, m, l = len(s1), len(s2), len(s3)
        if n + m != l:
            return False
        dp = [[False] * (m + 1) for _ in range(n + 1)]
        dp [0][0] = True
        for i in range(1, n + 1):
            dp [i][0] = dp [i - 1][0] and s1[i - 1] == s3[i - 1]
        for i in range(1, m + 1):
            dp [0][i] = dp [0][i - 1] and s2[i - 1] == s3[i - 1]

        for i in range(1,n+1):
            for j in range(1,m+1):
                if s1[i-1] == s3[i+j-1] and dp[i-1][j]:
                    dp[i][j] = True
                if s2[j-1] == s3[i+j-1] and dp[i][j-1]:
                    dp[i][j] = True
        return dp[-1][-1]```

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

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

相关文章

Linux应用开发基础知识——I2C应用编程(十二)

前言&#xff1a; I2C&#xff08;Inter-Integrated Circuit BUS&#xff09;是集成电路总线&#xff0c;是目前应用最广泛的总线之一&#xff0c;最初由PHILIPS&#xff08;现为NXP&#xff09;设计。它使用多主从架构&#xff0c;主要用于连接低速周边设备。I2C总线在硬件物理…

Linux基础命令4

find查找操作 1.文件名 上图中&#xff0c;一共有4个部分&#xff0c;分别是find&#xff0c;搜索路径&#xff0c;-name&#xff0c;文件名 find加上文件的路径&#xff08;也就是要查找的文件在根目录下的usr目录下的bin目录底下&#xff09; 加上 -name 加上文件名&a…

斐波那契数列数列系列问题详解

斐波那契数列数列是我们学习递归的入门问题&#xff0c;是一种非常经典的题型&#xff0c;也衍生出了一些更复杂的题型&#xff0c;这一节就让我们彻底理解斐波那契数列系列问题。 一、概念介绍 1、什么是斐波那契数列&#xff1f; 斐波那契数列&#xff08;Fibonacci sequenc…

手持式无线通信频谱分析仪 MS2713E

MS2713E 手持式无线通信频谱分析仪 安立手持式无线通信频谱分析仪 MS2713E 旨在处理最恶劣的现场条件&#xff0c;使您能够监控、定位、识别和分析各种蜂窝、2G/3G/4G、陆地移动无线电、Wi-Fi 和广播信号。多功能 Spectrum Master 在定位和识别宽频率范围内的信号时&#xff0…

第7章-使用统计方法进行变量有效性测试-7.4.2-多元线性回归

目录 多元线性回归模型 总体回归函数 样本回归函数 线性回归模型的假定 普通最小二乘法&#xff08;Ordinary Least Squares&#xff0c;OLS&#xff09; 拟合优度指标 F检验 回归系数的t检验 Python中构建多元线性回归模型 数据理解 数据读取 数据清洗 相关分析 …

短视频账号矩阵系统saas化批量管理部署搭建/技术

一、短视频矩阵系统建模----技术api接口--获取用户授权 技术文档分享&#xff1a; 本系统采用MySQL数据库进行存储&#xff0c;数据库设计如下&#xff1a; 1.用户表&#xff08;user&#xff09;&#xff1a; - 用户ID&#xff08;user_id&#xff09; - 用户名&#xff08;…

快来考试拿证书!KubeSphere 个人技能专业考试认证上线啦!

以容器技术和容器编排为基础的云原生应用&#xff0c;被越来越多的企业用户接受和使用&#xff0c;并且在生产环境中使用容器技术的比例逐年增加。Kubernetes 无疑已经成为容器编排的事实基础&#xff0c;而依托于 Kubernetes 开发的开源容器平台 KubeSphere 也收获了一众拥趸。…

2023 年 亚太赛 APMCM (A题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 完整内容可以在文章末尾领取&#xff01; 问题1 图像处理&am…

使用支付宝的沙箱环境在本地配置模拟支付并发布至公网调试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问9. 结语 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙…

全国传统村落数据总览,shp/csv格式,中国哪些区域传统村落最多呢?

传统村落是指拥有物质形态和非物质形态文化遗产&#xff0c;具有较高的历史、文化、科学、艺术、社会、经济价值的村落。 今天我们分享全国传统村落数据&#xff0c;对全国范围内的传统村落进行统计和分析。 该数据是shpcsv格式的&#xff0c;几何类型为点&#xff0c;2020年…

深度学习模型训练计算量的估算

深度学习模型训练计算量的估算 方法1&#xff1a;基于网络架构和批处理数量计算算术运算次数前向传递计算和常见层的参数数量全连接层&#xff08;Fully connected layer&#xff09;参数浮点数计算量 CNN参数浮点数计算量 转置CNN参数浮点数计算量 RNN参数浮点数计算量 GRU参数…

张弛语言课奇幻剧配音,一场特殊的体验

在为奇幻剧进行配音时&#xff0c;配音艺术家要将自己投入到一个充斥着魔法、幻想生物和超自然现象的虚构世界中。奇幻剧侧重于构建一个超越现实的幻境&#xff0c;因此配音工作要求既要呈现角色的个性化特征&#xff0c;也要与剧中的奇幻氛围相得益彰。以下是进行奇幻剧配音的…

RTOS的任务触发底层逻辑

&#xff08;定时器用于计时和触发事件&#xff0c;任务则由调度器进行调度和执行&#xff1a;每当时钟节拍到达时&#xff0c;系统会触发一个称为 tick 中断的事件。当 tick 中断发生时&#xff0c;操作系统会在中断服务例程中执行一定的处理&#xff0c;其中包括更新任务的运…

特殊企业信息轻松查询:特殊企业基本信息查询API的实用性探讨

引言 在当今数字化时代&#xff0c;企业管理和决策往往取决于有效获取和分析关键信息。对于特殊企业&#xff0c;如香港公司、社会组织、律所、事业单位、基金会和新机构&#xff0c;获取准确、及时的基本信息至关重要。在这个背景下&#xff0c;特殊企业基本信息查询API正逐渐…

Javascript中的宏任务与微任务

事件循环 JavaScript 语言的一大特点就是单线程&#xff0c;也就是说&#xff0c;同一个时间只能做一件事。为了协调事件、用户交互、脚本、UI 渲染和网络处理等行为&#xff0c;防止主线程的不阻塞&#xff0c;Event Loop 的方案应用而生。Event Loop 包含两类&#xff1a;一…

redis之cluster集群

1、redis-cluster集群&#xff1a;redis3.0引入的分布式存储方案 2、集群&#xff1a;由多个node节点组成&#xff0c;redis数据分布在这些节点之中 &#xff08;1&#xff09;在集群之中也分主节点和从节点 &#xff08;2&#xff09;自带哨兵模式 3、redis-cluster集群的…

私域电商和裂变营销的商机在哪里?

微三云胡佳东认为&#xff1a;公域流量已衰退&#xff0c;私域电商和裂变营销即将引来新的趋势&#xff01;品牌和传统企业的战略方向应该开始布局“内容”&#xff0c;线上流量持续分化&#xff0c;裂变营销的方式又将是一场新的改革革命。 私域电商和裂变营销的商机在于降低获…

每天5分钟复习OpenStack(十)Ceph 架构

1、Ceph是什么&#xff1f; “Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”这句话说出了Ceph的特性&#xff0c;它是可靠的、可扩展的、统一的、分布式的存储系统。Ceph可以同时提供对象存储RADOSGW&am…

牙科诊所小程序开发案例

一、背景&#xff1a; 针对传统口腔医疗领域中口腔诊所推广难,纸质信息保存难等问题&#xff0c;设计并开发了基于微信小程序实现口腔服务助手平台。为了给人们提供便捷&#xff0c;快速的预约方式&#xff0c;提高社会人群对口腔健康的关注力度。通过微信小程序互联网技术&…

Android Studio xml文件id爆红但是项目可以运行

这种原因是你的R文件太大了&#xff08;超过了Android Studio的上限25.6M了&#xff09; 解决办法如下&#xff1a; Help -> Edit Custom Properties -> create custom properties?(yes) ->添加 idea.max.intellisense.filesize5000 最后需要重启Android Studio