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

题目链接

Leetcode.712 两个字符串的最小ASCII删除和 mid

题目描述

给定两个字符串 s1s2,返回 使两个字符串相等所需删除字符的 ASCII 值的最小和 。

示例 1:

输入: s1 = “sea”, s2 = “eat”
输出: 231
解释: 在 “sea” 中删除 “s” 并将 “s” 的值(115)加入总和。
在 “eat” 中删除 “t” 并将 116 加入总和。
结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。

示例 2:

输入: s1 = “delete”, s2 = “leet”
输出: 403
解释: 在 “delete” 中删除 “dee” 字符串变成 “let”,
将 100[d]+101[e]+101[e] 加入总和。在 “leet” 中删除 “e” 将 101[e] 加入总和。
结束时,两个字符串都等于 “let”,结果即为 100+101+101+101 = 403 。
如果改为将两个字符串转换为 “lee” 或 “eet”,我们会得到 433 或 417 的结果,比答案更大。

提示:

  • 0 ≤ s 1. l e n g t h , s 2. l e n g t h ≤ 1000 0 \leq s1.length, s2.length \leq 1000 0s1.length,s2.length1000
  • s1s2 由小写英文字母组成

解法:动态规划

我们定义 f ( i , j ) f(i,j) f(i,j) 为:使得 s1 的前 i i i 个字符 和 s2 的前 j j j 个字符相等所需要删除字符的最小 ASCII 值。

按照定义最终我们要返回的答案就是 f ( m , n ) f(m,n) f(m,n) m , n m,n m,n 分别为 s1s2 中的字符数量。

我们用 A S C I I ( x ) ASCII(x) ASCII(x) 表示 x x x 的ASCII值。

  • 如果 s 1 [ i − 1 ] = s 2 [ j − 1 ] s1[i-1] = s2[j-1] s1[i1]=s2[j1],那么 f ( i , j ) = f ( i − 1 , j − 1 ) f(i,j) = f(i - 1,j - 1) f(i,j)=f(i1,j1)
  • 如果 s 1 [ i − 1 ] ≠ s 2 [ j − 1 ] s1[i-1] \neq s2[j-1] s1[i1]=s2[j1],那么既可能选择删除 s 1 [ i − 1 ] s1[i-1] s1[i1],此时 f ( i , j ) = f ( i − 1 , j ) + A S C I I ( s 1 [ i − 1 ] ) f(i,j) = f(i-1,j) + ASCII(s1[i-1]) f(i,j)=f(i1,j)+ASCII(s1[i1]);也有可能选择删除 s 2 [ j − 1 ] s2[j-1] s2[j1],此时 f ( i , j ) = f ( i , j − 1 ) + A S C I I ( s 2 [ j − 1 ] ) f(i,j) = f(i,j - 1) + ASCII(s2[j-1]) f(i,j)=f(i,j1)+ASCII(s2[j1])。所以要取二者的最小值,即最终式子为 f ( i , j ) = m a x { f ( i − 1 , j ) + A S C I I ( s 1 [ i − 1 ] ) , f ( i , j − 1 ) + A S C I I ( s 2 [ j − 1 ] ) } f(i,j) = max \{f(i-1,j) + ASCII(s1[i-1]),f(i,j - 1) + ASCII(s2[j-1]) \} f(i,j)=max{f(i1,j)+ASCII(s1[i1]),f(i,j1)+ASCII(s2[j1])}

对于一些特殊情况,我们需要提前处理。对于 f ( i , 0 ) f(i,0) f(i,0) f ( 0 , j ) f(0,j) f(0,j) 我们只能选择删除所有的字符使得 s1s2 都为空。

时间复杂度: O ( n 2 ) O(n^2) O(n2)

C++代码:

class Solution {
public:int minimumDeleteSum(string s1, string s2) {int m = s1.size() , n = s2.size();vector<vector<int>> f(m + 1,vector<int>(n + 1));for(int i = 1;i <= m;i++) f[i][0] = f[i - 1][0] + static_cast<int>(s1[i - 1]);for(int j = 1;j <= n;j++) f[0][j] = f[0][j - 1] + static_cast<int>(s2[j - 1]);for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){if(s1[i - 1] == s2[j - 1]) {f[i][j] = f[i - 1][j - 1];}else{int a = f[i][j - 1] + static_cast<int>(s2[j - 1]);int b = f[i - 1][j] + static_cast<int>(s1[i - 1]);f[i][j] = min(a,b);}}}return f[m][n];}
};

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

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

相关文章

Keepalived+LVS高可用集群

目录 一、keepalived介绍&#xff1a; 二、keepalived工具介绍&#xff1a; &#xff08;1&#xff09;管理 LVS 负载均衡软件&#xff1a; &#xff08;2&#xff09;支持故障自动切换&#xff1a; &#xff08;3&#xff09;实现 LVS 负载调度器、节点服务器的高可用性&…

合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)

二维码&#xff08;Qrcode&#xff09; 示例代码 qrcodelvgl.qrcode_create(lvgl.scr_act(),nil)lvgl.qrcode_set_txt(qrcode,"https://doc.openluat.com/home")lvgl.obj_set_size(qrcode,400,400)lvgl.obj_align(qrcode, nil, lvgl.ALIGN_CENTER, 0, 0)创建 可以通…

【Nginx25】Nginx学习:连接限制和请求限制

Nginx学习&#xff1a;连接限制和请求限制 之前我们就已经学习过了一些和流量限制相关的配置指令&#xff0c;它们是 HTTP 核心配置中的内容 &#xff0c;不记得的小伙伴可以回去看一下 Nginx学习&#xff1a;HTTP核心模块&#xff08;七&#xff09;请求体与请求限流https://m…

第3章_瑞萨MCU零基础入门系列教程之开发环境搭建与体验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

【网络编程】TCP Socket编程

TCP Socket编程 1. ServerSocket2. Socket3. TCP的长短连接4. Socket 通信模型5. 代码示例&#xff1a;TCP 回显服务器 流套接字&#xff1a; 使用传输层TCP协议 TCP: 即Transmission Control Protocol&#xff08;传输控制协议&#xff09;&#xff0c;传输层协议。 TCP的特点…

一文详解二叉搜索树

数据结构-二叉查找树 前言 **摘自百度百科&#xff1a;**二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若…

JDK8特性——接口增强函数式接口Optional方法引用

文章目录 接口增强默认方法静态方法 函数式接口SupplierConsumerFunctionPredicate Optional 类以前对null 的处理Optional的基本使用Optional的常用方法 方法引用方法引用的格式对象名::方法名类名::静态方法名类名::引用实例方法类名::构造器数组::构造器 接口增强 在JDK8之…

智能远程监考方案助力企业考试化繁为简

在音视频数字化之旅中&#xff0c;轻装上阵。 近年来&#xff0c;在数字化浪潮之下&#xff0c;远程考试频繁成为各领域热词&#xff0c;各企业也纷纷改革求新&#xff0c;将原本的企业内部考试转移到线上&#xff0c;从而获取更低廉的组考成本&#xff0c;更高的管理效率&…

深度学习基础之梯度下降

1. 引言 梯度下降是一种用于最小化&#xff08;或最大化&#xff09;损失函数的优化算法。它是机器学习和深度学习中的一个关键概念&#xff0c;通常用于调整学习算法中的参数。 梯度下降背后的核心思想是迭代调整参数以最小化损失函数。它的工作原理是计算损失函数相对于每个…

数据治理-度量指标

为应对长期学习曲线的阻力和挑战&#xff0c;对数据治理项目必须要有通过证明数据治理参与者如何增加业务价值和实现目标的指标来衡量进展和成功。 为了管理所需的行为变化&#xff0c;要着重衡量数据治理的推广进展、与治理需求和符合程度以及数据治理为组织带来的价值。重点是…

【LeetCode-中等题】18. 四数之和

文章目录 题目方法一&#xff1a;双指针&#xff08;定2动2&#xff09; 题目 方法一&#xff1a;双指针&#xff08;定2动2&#xff09; 这题可以参考【LeetCode-中等题】15. 三数之和 区别在于&#xff0c;三数之和只需要用一个for循环定住一个数&#xff0c;然后设置两个前…

数据结构与算法(C语言版)P4---顺序表、链表总结

顺序表和链表&#xff08;双向带头链表&#xff09;的区别 顺序表&#xff1a; 优点&#xff1a; 支持随机访问。需要随机访问结构支持算法可以很好的使用。cpu高速缓存利用率&#xff08;命中率&#xff09;更高。存储密度高 缺点&#xff1a; 头部中部插入删除时间效率低。…

合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)

窗口 (Window) 分 享导出pdf 示例代码 win lvgl.win_create(lvgl.scr_act(), nil) lvgl.win_set_title(win, "Window title") -- close_btn lvgl.win_add_btn_right(win, "\xef\x80\x8d") -- --lvgl.obj_set_event_cb(cl…

典型数据结构-图,图的存储、基本操作和遍历

图 引自&#xff1a;《数据结构教程》。 概念 图可以使得元素之间的关系是 多对多。图中任意两个数据元素之间都可能存在连接关系。图作为一种数据结构&#xff0c;可以表达数据元素之间广泛存在着的更为复杂的关系。在众多应用之中&#xff0c;如电子线路分析、工程计划分析、…

Junit单元测试异常处理方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Junit单元测试异常处理方法 前言案例准备一、类方法内处理异常二、测试方法中处理异常1.try/catch/finally 语句2.Test(expected)3.ExpectedException 前言 提示&#xff1a…

深度解析shell脚本的命令的原理之mv

mv 是 Unix 或 Linux 中的一个基本命令&#xff0c;用于移动或重命名文件和目录。以下是对这个命令的深度解析&#xff1a; 基本操作&#xff1a;mv 命令的基本操作是将一个或多个源文件或目录移动到一个目标文件或目录&#xff0c;或者重命名源文件或目录。这是通过改变文件系…

详细指南:基于差分进化的马尔可夫链蒙特卡罗加速技术在MATLAB中的应用

第一部分:概念简介与基础知识 1. 什么是马尔可夫链蒙特卡罗 (Markov Chain Monte Carlo, MCMC)? 马尔可夫链蒙特卡罗是一种通过马尔可夫链来估计复杂分布的统计方法。通过构建一个特定的马尔可夫链,使其平稳分布等于目标分布,我们可以从该马尔可夫链中抽取样本来估计目标…

银河麒麟--国产操作系统-九五小庞

那么&#xff0c;我国国产操作系统现状到底如何呢&#xff1f; 自 1999 年徐冠华部长一语点破我们的产业软肋之后&#xff0c;国产操作系统起步于国家“七五”计划期间&#xff0c;目前国产操作系统均是基于Linux内核进行的二次开发&#xff0c;中国国产操作系统进入Linux元年…

CSS:隐藏移动端的滚动条的方式

目录 方式一&#xff1a;-webkit-scrollbar方式二&#xff1a;overflow方式三&#xff1a;clip-path方式四&#xff1a;mask 遮罩总结参考 移动端开发中&#xff0c;有一个横向滚动元素&#xff0c;产品告诉我不需要滚动条&#xff0c;我说这个简单&#xff0c;隐藏一下不就行了…

Yolov8小目标检测(23):多分支卷积模块RFB,扩大感受野提升小目标检测精度

💡💡💡本文改进:RFB 一个多分支的卷积模块:1)多分支卷积层;2)dilated 卷积层 RFB | 亲测在红外弱小目标检测涨点明显,map@0.5 从0.755提升至0.762 💡💡💡Yolo小目标检测,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供…