力扣--动态规划97.交错字符串

思路分析:

  1. 动态规划数组定义

    • dp[i][j] 表示:使用字符串 s1 的前 i 个字符和字符串 s2 的前 j 个字符,能否构成字符串 s3 的前 i + j 个字符的交错组合。
  2. 初始化

    • dp[0][0] 初始化为 1,表示空串是 s1s2 的交错组成。
    • 初始化第一行和第一列,检查 s1s2 的前缀是否与 s3 的对应前缀相等,若相等则标记为 1
  3. 递推关系

    • dp[i][j] 的值取决于 s1[i-1]s2[j-1]s3[i+j-1] 是否匹配,以及之前的状态:
      • 如果 s3[i+j-1] == s1[i-1]dp[i-1][j] == 1,表示当前字符匹配且前缀也能交错组成,标记 dp[i][j] = 1
      • 如果 s3[i+j-1] == s2[j-1]dp[i][j-1] == 1,表示当前字符匹配且前缀也能交错组成,标记 dp[i][j] = 1
  4. 最终结果

    • dp[len1][len2] 的值将告诉我们整个字符串 s3 是否可以由 s1s2 交错组成。
  5. 返回结果

    • 返回 dp[len1][len2]
class Solution {
public:// 判断字符串 s3 是否是由字符串 s1 和 s2 交错组成的bool isInterleave(string s1, string s2, string s3) {// 获取字符串 s1、s2、s3 的长度int len1 = s1.length();int len2 = s2.length();int len3 = s3.length();// 如果 s1 和 s2 的长度之和不等于 s3 的长度,直接返回 falseif (len1 + len2 != len3)return false;// 处理特殊情况:当 s1 为空时,判断 s2 和 s3 是否相等;当 s2 为空时,判断 s1 和 s3 是否相等if (len1 == 0 && s2 == s3)return true;if (len2 == 0 && s1 == s3)return true;// 创建二维数组 dp,用于记录 s1 和 s2 是否能够交错组成 s3 的子串vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0));// 初始化 dp[0][0] 为 1,表示空串是 s1 和 s2 的交错组成dp[0][0] = 1;// 初始化第一行,如果 s1 的前缀和 s3 相等,标记 dp[i][0] 为 1for (int i = 1; i <= len1; ++i) {if (s1[i - 1] == s3[i - 1])dp[i][0] = 1;elsebreak;}// 初始化第一列,如果 s2 的前缀和 s3 相等,标记 dp[0][j] 为 1for (int i = 1; i <= len2; ++i) {if (s2[i - 1] == s3[i - 1])dp[0][i] = 1;elsebreak;}// 动态规划,填充 dp 数组for (int i = 1; i <= len1; ++i) {for (int j = 1; j <= len2; ++j) {// 如果 s3 的当前字符等于 s1 的当前字符,并且 s1 的前缀也能够组成 s3 的前缀,则标记 dp[i][j] 为 1if (s3[i + j - 1] == s1[i - 1] && dp[i - 1][j])dp[i][j] = 1;// 如果 s3 的当前字符等于 s2 的当前字符,并且 s2 的前缀也能够组成 s3 的前缀,则标记 dp[i][j] 为 1if (s3[i + j - 1] == s2[j - 1] && dp[i][j - 1])dp[i][j] = 1;}}// 返回 dp 数组右下角的值,表示整个 s3 是否由 s1 和 s2 交错组成return dp[len1][len2];}
};

这个还是很抽象难理解,这里举个例子:
 

假设我们有两个字符串 s1 = "abc"s2 = "def",以及 s3 = "adbcef"。我们想要判断是否可以通过交错组合 s1s2 得到 s3

我们可以用一个二维数组 dp[i][j] 来表示 s1 的前 i 个字符和 s2 的前 j 个字符是否可以组成 s3 的前 i+j 个字符。

  1. 初始化

    • dp[0][0] 初始化为 1,因为空串是任何字符串的子串,所以空串可以由 s1s2 交错组成。
    • 初始化第一行和第一列,检查 s1s2 的前缀是否能够交错组成 s3 的前缀

    dp array:
      d e f
     1 0 0 0
    a 1 0 0 0
    b 0 0 0 0
    c 0 0 0 0

  2. 递推关系

    • 我们递推地填充 dp 数组。在这个过程中,如果当前字符匹配,我们要考虑之前的状态是否可行。
    • 对于 dp[i][j],如果 s3[i+j-1]s1[i-1] 匹配,并且 dp[i-1][j]1,那么 dp[i][j] 也可以为 1。同样,如果 s3[i+j-1]s2[j-1] 匹配,并且 dp[i][j-1]1,那么 dp[i][j] 也可以为 1。

    dp array:
      d e f
     1 0 0 0
    a 1 1 1 0
    b 0 1 0 0
    c 0 0 1 0

  3. 最终结果

    • 最终的 dp[len1][len2]1,表示整个字符串 s3 可以由 s1s2 交错组成。

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

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

相关文章

蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)

目录 一、题目描述&#xff1a; 二、整体思路 (一)字典序比较规则 (二)正确理解题意 &#xff08;三&#xff09;分类讨论 三、代码 一、题目描述&#xff1a; 二、整体思路 (一)字典序比较规则 首先要知道字典序是怎么比较大小的&#xff0c;简单来说按以下次序进行比较&am…

再也不想去字节跳动面试了,6年测开面试遭到这样打击.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

权限管理系统-0.4.0

五、权限管理 5.1 引入JWT JWT是JSON Web Token的缩写&#xff0c;即JSON Web令牌&#xff0c;是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以…

C语言基础练习——Day05

目录 选择题 编程题 数字在升序数组中出现的次数 整数转换 选择题 1、如下程序的功能是 #include <stdio.h> int main() {char ch[80] "123abcdEFG*&";int j;puts(ch);for(j 0; ch[j] ! \0; j){if(ch[j] > A && ch[j] < Z)ch[j] ch[j] e…

智能测径仪在胶管行业的应用

关键字&#xff1a;胶管外径尺寸测量&#xff0c;胶管检测仪器&#xff0c;胶管外径检测&#xff0c;高温胶管外径检测&#xff0c;软硬胶管检测&#xff0c; 智能测径仪在家胶管行业中的应用主要体现在对胶管外径的精确测量和控制上。在胶管生产过程中&#xff0c;外径的大小直…

dubbo调用的自定义过滤器中设置MDC无法生效的问题

AI的解释 Dubbo自定义过滤器不生效可能有多种原因&#xff0c;以下是一些常见的原因及解决方法&#xff1a; 过滤器未正确配置&#xff1a; 检查过滤器是否已经在Dubbo的配置文件中正确声明&#xff0c;并且已经添加到过滤器链中。在XML配置中&#xff0c;应使用<dubbo:se…

Python3虚拟环境之pipenv

pipenv是python官方推荐的包管理工具&#xff0c;集成了virtualenv, pip和pyenv三者的功能。集合了所有的包管理工具的长处&#xff0c;自动为项目创建和管理虚拟环境。 安装 pip install pipenv在Pycharm中使用 修改Pipfile的安装源参数url&#xff0c;改为https://pypi.tun…

Valid8Proxy:一款功能强大的工作代理获取、验证和存储工具

关于Valid8Proxy Valid8Proxy是一款功能强大且用户友好的代理管理工具&#xff0c;该工具功能丰富&#xff0c;旨在帮助广大研究人员获取、验证和存储工作代理的相关信息。 无论你是需要用于网络资源爬取、网络数字匿名化还是测试网络安全的代理&#xff0c;Valid8Proxy都可以…

应用方案 |安防摄像头(IPC)的步进马达及IR-CUT驱动芯片D6212

应用领域 安防摄像头&#xff08;IPC&#xff09;的步进马达及IR-CUT驱动。 02 功能介绍 D6212内置8路带有续流二极管的达林顿驱动管阵列和一个H桥驱动&#xff0c;单芯片即可实现2个步进电机和一个IR-CUT的直接驱动&#xff0c;使得电路应用非常简单。单个达林顿管在输入…

java异常概述及自定义处理

前言 学到异常了&#xff0c;本来以为处理异常只是避免bug&#xff0c;结果发现还可以为了编程需要自定义异常。打好基础&#xff0c;daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

【喜报!】科大睿智为企业成功通过CMMI5级评估!

山东智云信息科技有限公司成立于2011年&#xff0c;总部地处泉城济南&#xff0c;一直专注于生态环境信息化领域解决方案的咨询设计、产品研发、项目实施和系统集成类服务&#xff0c;致力于成为固定污染源监管与非现场精准执法领域的领军企业。 山东智云拥有100余名生态环境信…

C++ 作业 24/3/11

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream>using namespace std;int main() {string str;cout << "please enter str:&…

0基础、适合转行学Python吗?

01 对于0基础的人&#xff0c;直接学 Python 编程合适吗&#xff1f; 在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;非常容易上手&#xff0c;Python 可以让你更好的理解编程这件事情。 所以&#xff0c;我只能说非常…

最新免费好用的手机数据恢复软件EasyRecovery易恢复 2024

easyrecovery pro在easyrecovery的基础上进行了全新的升级&#xff0c;对于可恢复的内容进行了深度的开发&#xff0c;easyrecovery pro相比较旧版的easyrecovery而言&#xff0c;可恢复的选项更多&#xff0c;时间跨度也更长。easyrecovery pro简介&#xff1a;1、非常强大的数…

掼蛋的牌型与规律(下篇)

一、三不带 一般出三不带有几种情况&#xff1a;没有对子配、对子和三张数量不匹配、对子成了三连对、对子太大。作为发牌方&#xff0c;首发三不带可以迷惑对手。三不带打出来很难处理&#xff0c;如果接了三不带可能就会将小对子留下&#xff0c;不接又不甘心让对方继续有出牌…

知识积累(四):无

文章目录 1. KL散度2. GELU 激活函数3. 向量运算4. bert4.1 词嵌入4.2 cross-encoder 模型4.3 bert 架构4.4 bert 池化操作 5. Fid 模型&#xff08;Fusion-in-Decoder&#xff09;6. 多分类损失函数6.1 交叉熵损失6.2 softmax 损失 7. t-sne8. NDCG参考资料 1. KL散度 衡量两…

【开发】JavaWeb开发中如何解析JSON格式数据

目录 前言 JSON 的数据类型 Java 解析 JSON 常用于解析 JSON 的第三方库 Jackson Gson Fastjson 使用 Fastjson Fastjson 的优点 Fastjson 的主要对象 JSON 接口 JSONObject 类 JSONArray 类 前言 1W&#xff1a;什么是JSON&#xff1f; JSON 指 JavaScrip t对象表…

业界主流数据加速技术路线

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…