LeetCode 2565.最少得分子序列

给你两个字符串 s 和 t 。

你可以从字符串 t 中删除任意数目的字符。

如果没有从字符串 t 中删除字符,那么得分为 0 ,否则:

令 left 为删除字符中的最小下标。
令 right 为删除字符中的最大下标。
字符串的得分为 right - left + 1 。

请你返回使 t 成为 s 子序列的最小得分。

一个字符串的 子序列 是从原字符串中删除一些字符后(也可以一个也不删除),剩余字符不改变顺序得到的字符串。(比方说 “ace” 是 “abcde” 的子序列,但是 “aec” 不是)。

示例 1:

输入:s = “abacaba”, t = “bzaa”
输出:1
解释:这个例子中,我们删除下标 1 处的字符 “z” (下标从 0 开始)。
字符串 t 变为 “baa” ,它是字符串 “abacaba” 的子序列,得分为 1 - 1 + 1 = 1 。
1 是能得到的最小得分。
示例 2:

输入:s = “cde”, t = “xyz”
输出:3
解释:这个例子中,我们将下标为 0, 1 和 2 处的字符 “x” ,“y” 和 “z” 删除(下标从 0 开始)。
字符串变成 “” ,它是字符串 “cde” 的子序列,得分为 2 - 0 + 1 = 3 。
3 是能得到的最小得分。

提示:

1 <= s.length, t.length <= 105^55
s 和 t 都只包含小写英文字母。

对于我们要删除的下标,left和right之间的字符可以全部删去,因为越删除,t就越可能成为s的子序列。删除子串后,剩下部分是t的一个前缀和一个后缀,我们可以找到t的后缀能匹配的最长s后缀,可以用suf数组记录下来s的每个下标对应的t中能匹配到的最长后缀,前缀同理,然后找出能使t成为s子序列的最小差值:

class Solution {
public:int minimumScore(string s, string t) {int sSize = s.size();int tSize = t.size();int sIdx = sSize - 1;int tIdx = tSize - 1;// suf保存s的下标最多能匹配到t中哪个后缀vector<int> suf(sSize + 1);suf[sSize] = tSize;while (sIdx >= 0 && tIdx >= 0) {if (s[sIdx] == t[tIdx]) {--tIdx;}// 最多能匹配到tIdx+1到t的结尾suf[sIdx] = tIdx + 1;--sIdx;}// 如果t匹配完了,说明t本身就是s的子序列if (tIdx < 0) {return 0;}// 补全剩下的suf数组while (sIdx >= 0) {suf[sIdx] = tIdx + 1;--sIdx;}// 初始化为删除t[0:suf[0]]的情况int ans = suf[0];sIdx = 0;tIdx = 0;while (sIdx < sSize && tIdx < tSize) {if (s[sIdx] == t[tIdx]) {++tIdx;}// 找出最小得分// suf[sIdx + 1]是s的下一个下标对应的能匹配的最小right// tIdx - 1是s的当前下标对应的能匹配的最大left// 能删除的就是(left, right)ans = min(ans, suf[sIdx + 1] - (tIdx - 1) - 1);++sIdx;}return ans;}
};

如果s的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(n)。

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

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

相关文章

【文献笔记】PointWeb

参考笔记: https://blog.csdn.net/m0_69412369/article/details/143106494 https://www.cnblogs.com/A-FM/p/PointWeb.html 注:本文的大部分内容是转载而来 CVPR 2019:PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing 论文:https://ieeex…

用工招聘小程序:功能版块与前端设计解析

在当下就业市场日益活跃的背景下&#xff0c;用工招聘小程序应运而生&#xff0c;它以高效、便捷的特点&#xff0c;为求职者与企业搭建起一座沟通的桥梁。本文将深入分析这类小程序的核心功能版块及其前端设计&#xff0c;探讨其如何优化招聘流程&#xff0c;提升用户体验。用…

uTools 轻工具 简洁又方便

uTools 是一款跨平台轻工具平台&#xff0c;通过插件化设计提供高效工作方式&#xff0c;支持 Windows、MacOS、Linux 系统。 ‌ 核心功能 ‌超级搜索框‌&#xff1a;支持快捷键&#xff08;默认 AltSpace&#xff09;呼出&#xff0c;可搜索文件、网页、应用等。 ‌‌本地文…

图技术重塑金融未来:悦数图数据库如何驱动行业创新与风控变革

随着大数据的广泛应用和云计算的快速发展&#xff0c;金融行业的数据已经从“大”转向了“海”&#xff0c;从而对传统的数据处理、分析、挖掘等的方法和工具提出了更高的要求&#xff0c;也为金融领域的数据的海量的关联分析、实时的风控和复杂的决策支持等带来了一系列的挑战…

openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式

华为文档创建虚拟机步骤 配置bios支持虚拟化 2、检查系统是否支持虚拟化 3、安装虚拟化相关组件,并启动 yum install -y qemu virt-install virt-manager libvirt-daemon-qemu edk2-aarch64.noarch virt-viewer systemctl start libvirtd systemctl enable libvirtd4、创建…

Sentinel:微服务架构下的高可用流量防卫兵

一、引言&#xff1a;为什么需要Sentinel&#xff1f; 在分布式系统架构中&#xff0c;随着业务复杂度的提升和微服务架构的普及&#xff0c;服务之间的依赖关系变得越来越复杂。一个服务的不可用或异常可能会在整个系统中产生连锁反应&#xff0c;导致整个系统崩溃。这就是所…

详解 new 和 delete

目录 一、简要描述两者的作用 二、实例解析 1. 浅层区别 2. 深层区别 三、拓展&#xff08;operator new 的妙用&#xff09; 一、简要描述两者的作用 new : 是c推崇的 内存申请 方式&#xff0c;拥有比 malloc 更先进的机制 delete :是 对应的 内存释放方式&#xff0c;…

fMoE论文阅读笔记

原文链接&#xff1a;https://arxiv.org/pdf/2502.05370v1 在混合专家&#xff08;MoE&#xff09;架构中&#xff0c;初始阶段涉及输入样本通过GateNet进行多分类的鉴别过程&#xff0c;目的是确定最适合处理输入的专家模型。这个步骤被称为“experts selection”&#xff0c;…

Linux 禅道开源版安装

1、下载安装包安装wget https://www.zentao.net/dl/zentao/18.5/ZenTaoPMS.18.5.zbox_64.tar.gz tar zxf ZenTaoPMS.18.5.zbox_64.tar.gz/opt/zbox/zbox -ap 81 -mp 3307 # 指定apache服务端口 、 mysql服务端口 /opt/zbox/zbox start #启动禅道服务( 其他命令 /opt/zbox/…

PySpark基础知识(python)

PySpark 是 Apache Spark 的 Python API&#xff0c;它允许开发者使用 Python 语言编写 Spark 应用程序&#xff0c;结合了 Python 的易用性和 Spark 的分布式计算能力&#xff0c;是处理大规模数据的强大工具。 一、安装与环境配置 安装方式&#xff1a; 通过 pip 安装&#…

基于python大数据的电影数据分析可视化系统设计与应用

标题:基于python大数据的电影数据分析可视化系统设计与应用内容:1.摘要 本研究旨在设计并实现一个基于Python的大数据电影数据分析与可视化系统&#xff0c;以解决当前电影行业数据分散、分析效率低及可视化能力不足的问题。系统采用Python语言结合Pandas、NumPy进行数据清洗与…

【PyTorch】图像多分类

多类图像分类的目标是为一组固定类别中的图像分配标签。目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训练 用预训练权重进行训练 加载和处理数据 将使用 PyTorch torchvision 包中提供的 STL-10 数据集&#xff0c;数据集中有…

计算机视觉----opencv实战----指纹识别的案例

一、数据准备src2.BMPsrc1.BMPsrc.bmpmodel.BMP二、识别原理讲解&#xff08;sift特征提取&#xff09;SIFT&#xff08;Scale-Invariant Feature Transform&#xff0c;尺度不变特征变换&#xff09;是一种经典的图像特征提取算法&#xff0c;核心优势是不受图像尺度缩放、旋转…

npm 发布流程——从创建组件到发布到 npm 仓库

1. 准备组件 1.1 创建一个 Vue 组件 假设我们要创建一个简单的按钮组件&#xff1a; src/MyButton.vue <template><button class"my-btn" click"$emit(click)"><slot /></button> </template><script setup lang"ts…

MySQL入门基础指南

目录 一、什么是数据库&#xff1f; 仅依靠文件存储数据存在以下几个明显缺点&#xff1a; 数据库的存储介质通常包括&#xff1a; 二、主流数据库介绍 三、客户端 VS 服务器 四、推荐看的MySQL安装技术博客 五、数据库的存储介质 数据库的存储介质主要分为以下两类&am…

【实战中提升自己完结篇】分支篇之分支之无线、内网安全与QOS部署(完结)

1 1拓扑 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil1 分支无线部署 说明&#xff1a;分支无线用瘦AP部署&#xff0c;通过VPN直接注册到总部的AC上面&#xff0c;实现无线的业务提供&…

带你了解STM32:GPIO通用输入输出口

目录 3.1 GPIO简介 3.2 GPIO基本结构 3.3 GPIO位结构 输入部分&#xff1a; 二极管的保护作用&#xff1a; 施密特触发器&#xff1a; 片上外设端口 输出部分&#xff1a; MOS管 3.4 GPIO模式 3.4.1 浮空/上拉/下拉输入 3.4.2 模拟输入 3.4.3 开漏/推挽输出 3.4.…

Http(自写)

作为一个程序员&#xff0c;假设我们要在a电脑的进程里发一段数据到b电脑&#xff0c;一般使用socket编程&#xff0c;可选项也就tcp&#xff0c;udp二选一socket本质上就是一个代码库tcp有粘包问题&#xff08;字节流&#xff09;&#xff0c;纯裸tcp不能之际拿来使用所以我们…

C#使用OpenVinoSharp和PP-Human进行行人检测

效果 项目依赖 OpenCvSharp 4.11.0.20250507 OpenVINO.CSharp.Windows 2024.0.0.1 主要代码 using OpenCvSharp; using OpenVinoSharp; using System; using System.Windows.Forms;namespace HelloPPHuman {public partial class Form1 : Form{public Form1(){InitializeCo…

四、Scala深入面向对象:类、对象与伴生关系

在前几节中&#xff0c;我们学习了 Scala 的基础语法和流程控制。现在&#xff0c;我们将深入探索 Scala 作为一门纯粹的面向对象语言的核心。在 Scala 中&#xff0c;万物皆对象&#xff0c;没有像 Java 那样的原始类型和静态成员的区分。本节将重点介绍如何定义对象的蓝图&am…