【动态规划算法练习】day14

news2025/1/4 11:45:33

文章目录

  • 一、97. 交错字符串
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、712. 两个字符串的最小ASCII删除和
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、718. 最长重复子数组
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、97. 交错字符串

1.题目简介

97. 交错字符串
给定三个字符串 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 连接。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

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

4.运行结果

在这里插入图片描述

二、712. 两个字符串的最小ASCII删除和

  1. 交错字符串、712. 两个字符串的最小ASCII删除和、718. 最长重复子数组

1.题目简介

712. 两个字符串的最小ASCII删除和
给定两个字符串s1 和 s2,返回 使两个字符串相等所需删除字符的 ASCII 值的最小和 。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    int minimumDeleteSum(string s1, string s2) {
        vector<int> v(s2.size() + 1, 0);
        vector<vector<int>> dp(s1.size() + 1, v);
        //dp[i][j]表示以i-1为结尾的字符串s1,和以j-1为结尾的字符串s2的公共子序列字符之和
        for(int i = 1;i <= s1.size(); ++i)
        {
            for(int j = 1;j <= s2.size(); ++j)
            {
                if(s1[i - 1] == s2[j - 1])
                {
                    dp[i][j] = dp[i - 1][j - 1] + s1[i - 1];
                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        int sum = 0;
        for(auto& e : s1)
        {
            sum += e;
        }
        for(auto& e : s2)
        {
            sum += e;
        }
        return sum - 2 * dp[s1.size()][s2.size()];
    }
};

4.运行结果

在这里插入图片描述

三、718. 最长重复子数组

1.题目简介

718. 最长重复子数组
给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<int> v(nums2.size() + 1, 0);
        vector<vector<int>> dp(nums1.size() + 1, v);
        int ret = 0;
        for(int i = 1;i <= nums1.size(); ++i)
        {
            for(int j = 1;j <= nums2.size(); ++j)
            {
                if(nums1[i - 1] == nums2[j - 1])
                {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                ret = max(ret, dp[i][j]);
            }
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第14天。
行成于思,毁于随,继续加油。
来源:力扣(LeetCode),著作权归领扣网络所有。
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

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

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

相关文章

嵌入式如何面试10家公司,拿到9个offer的?

又快到一年一度的秋招季&#xff0c;不少同学私信学长吐苦水&#xff0c;明明在各大招聘网站上海投了那么多家公司&#xff0c;收到的面试通知却屈指可数&#xff0c;好不容易拿到面试机会&#xff0c;却在一面就扑街...... 很多同学能力还行&#xff0c;但是经验谈不上很出彩&…

【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机&#xff1a; 学习异步通知的时候&#xff0c;自己实现一个功能&#xff1a;按键控制蜂鸣器&#xff0c;同时LED灯在闪烁 结果&#xff1a;LED好像也同时被按键控制了 最后调试结果发现&#xff1a; 应用层的sleep被驱动层的kill_fasync打断&#xff0c;所以sle…

GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法

文章目录 GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法概述笔记老国标 - 判断线材标称直径的方法END GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法 概述 在淘宝上买线材, 买了RV1.5/RV1.0各买了4种颜色(红/黑/黄绿/蓝). 看到评论区, 有人留言, 说线径…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 3 日论文合集)

文章目录 一、检测相关(9篇)1.1 Federated Ensemble YOLOv5 - A Better Generalized Object Detection Algorithm1.2 Zero-shot Nuclei Detection via Visual-Language Pre-trained Models1.3 Federated Object Detection for Quality Inspection in Shared Production1.4 Comp…

Raw Socket 之网络层数据获取

目录 简介正常使用tcpdump程序与分析报文理解参考 简介 针对网络包&#xff0c;我们一般的发送接收直接使用的是应用层&#xff0c;此时无法分辨接收为广播包还是单播包&#xff0c;为了能够分辨出接收到的是否为广播包&#xff0c;需要接收数据链路层的数据或者网络层的数据。…

ct.js笔记-加载字体时字体名不能包含中文

这个和Qt很像&#xff0c;在开发过程中尽量避免使用中文。如下&#xff1a; 这个AaJH中文&#xff0c;在加载时&#xff1a; this.nickNameLabel new PIXI.Text(Your text here, ct.styles.get(AaJH中文)); this.addChild(this.nickNameLabel);this.nickNameLabel.x 30; thi…

UE5接入在线直播视频源,如hls(m3u8)格式

文章目录 1.实现目标2.实现过程2.1 VlcMedia插件重编译2.2 UE5接入在线直播2.3 创建材质3.参考资料1.实现目标 通过重编译VlcMedia插件,以支持在线直播视频在UE5中的播放,GIF动图如下: 2.实现过程 本文主要包括插件的重编译、在线直播视频的接入,以及材质的创建三个部分。…

基于Java办公用品管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

atomic原子操作

当一个程序中的两个线程同时向这个程序里的全局变量增加数时会发生什么&#xff1f; 理论上来说&#xff0c;应该是200000&#xff0c;但是最后结果不是200000。 这是多个线程同时操作一个全局变量引起的错误。 要解决这个错误&#xff0c;用互斥锁即可&#xff1a; 这样就可以…

【计算机视觉】DETR 系列的最新综述!

论文地址&#xff1a; https://arxiv.org/pdf/2306.04670.pdf项目地址&#xff1a; https://github.com/mindgarage-shan/trans_object_detection_surveyTransformer在自然语言处理(NLP)中的惊人表现&#xff0c;让研究人员很兴奋地探索它们在计算机视觉任务中的应用。与其他…

Spark | 性能调优原理与步骤 | 案例讲解

&#x1f525; 跟着梁哥打卡一波spark的性能调优&#xff5e; 文章目录 1、Spark调优原理与步骤2、Spark任务UI监控3、Spark调优案例3.1、资源配置优化3.2、利用缓存减少重复计算3.3、数据倾斜调优3.4、broadcastmap代替join3.5、reduceByKey/aggregateByKey代替groupByKey 1、…

为什么门店需要店务管理系统?店务管理系统的重要性有哪些?

随着经济市场的回暖&#xff0c;实体行业特别是门店都需要更好的营销手段以留住客户、转化客户&#xff0c;因此需要一个好的工具来完成对于店铺经营数据的实时了解和管理&#xff0c;这就需要用到店务经营管理系统。如蚓链数字化店务管理系统具备股东营销系统、收银系统及进销…

Linux5.12 rsync 远程同步

文章目录 计算机系统5G云计算第四章 LINUX rsync 远程同步一、rsync概述二、配置 rsync 服务1.配置rsync源服务器2.发起端 三、发起端配置 rsyncinotify1.修改rsync源服务器配置文件2.调整 inotify 内核参数3.安装 inotify-tools4.在另外一个终端编写触发式同步脚本 计算机系统…

7.4.2 【Linux】特殊设备 loop 挂载 (镜像文件不烧录就挂载使用)

挂载光盘/DVD镜像文件 如此一来我们不需要将这个文件烧录成为光盘或者是 DVD 就能够读取内部的数据了。 创建大文件以制作 loop 设备文件&#xff01; 创建大型文件 假设我要创建一个空的文件在 /srv/loopdev &#xff0c;那可以这样做&#xff1a; 将 512 块&#xff0c;每…

爱普生L358打印机墨仓有墨水但墨水指示灯常亮

产品类型&#xff1a;墨仓式多功能一体机 最大处理幅面&#xff1a;A4 涵盖功能&#xff1a;打印/复印/扫描 黑白打印速度&#xff1a;9ipm 耗材类型&#xff1a;分体式墨盒 打印分辨率&#xff1a;57601440dpi 问题描述&#xff1a; 爱普生L358彩…

RK3399平台开发系列讲解(入门篇)为什么需要学习Linux驱动

🚀返回专栏总目录 文章目录 一、为什么需要学习Linux驱动二、如何学习Linux驱动开发三、Linux 驱动学习的难点四、学习资料沉淀、分享、成长,让自己和他人都能有所收获!😄 一、为什么需要学习Linux驱动 学习Linux驱动开发有以下几个重要的原因: 深入理解系统底层:学习L…

【CSS】定位

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 标准流&#xff08;Normal Flow&#xff09;元素定位position属性静态定位-static…

(免费分享)基于springboot,vue在线小说系统

本系统功能包括&#xff1a; 普通用户端登录注册&#xff0c;小说的分类&#xff0c;日榜&#xff0c;月榜&#xff0c;年榜&#xff0c; 小说的阅读&#xff0c;分章节&#xff0c;小说的评论&#xff0c;收藏&#xff0c;推荐等等&#xff0c;以 及后台小说的维护&#xff0c…

Linux服务器扩容VG时报错 Couldn‘t create temporary archive name

今天扩容磁盘遇到失败报错。 [rootmysql ~]# vgextend rhel /dev/sdc1 Couldnt create temporary archive name. 原因&#xff1a;磁盘使用100%&#xff0c;无法执行挂载&#xff0c;须预留部分空间出来。解决办法&#xff1a;删掉其中无用文件、log日志继续操作即可。释放空间…

SpringBoot+Vue实现文件上传功能

目录 1.后端代码部分&#xff1a; 2.前端代码部分 3.效果展示 1.后端代码部分&#xff1a; RestController RequestMapping("/file") public class FileController {private final String UPLOAD_PATH "D:/OBS/";//这里写上你需要上传的路径&#xff…