算法刷题打卡第97天:删除字符串两端相同字符后的最短长度
删除字符串两端相同字符后的最短长度
难度:中等
给你一个只包含字符 'a','b' 和 'c' 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
- 选择字符串
s一个 非空 的前缀,这个前缀的所有字符都相同。 - 选择字符串
s一个 非空 的后缀,这个后缀的所有字符都相同。 - 前缀和后缀在字符串中任意位置都不能有交集。
- 前缀和后缀包含的所有字符都要相同。
- 同时删除前缀和后缀。
请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
双指针
思路:
题目要求删除字符串 sss 中字母相同且不相交的前缀与后缀,假设当前字符串的长度为 nnn,则执行的删除规则如下:
- 选择字符串 sss 一个非空的前缀 prefix=s[0,⋯,l]\textit{prefix} = s[0,\cdots,l]prefix=s[0,⋯,l],这个前缀的所有字符都相同,s[0]=s[1]=⋯=s[l]s[0] = s[1] = \cdots = s[l]s[0]=s[1]=⋯=s[l]。
- 选择字符串 sss 一个非空11的后缀 suffix=s[r,⋯,n−1]\textit{suffix} = s[r,\cdots,n-1]suffix=s[r,⋯,n−1],这个后缀的所有字符都相同,s[r]=s[r+1]=⋯=s[n−1]s[r] = s[r + 1] = \cdots = s[n-1]s[r]=s[r+1]=⋯=s[n−1]。
- 前缀和后缀在字符串中任意位置都不能有交集,即 l<rl < rl<r。
- 前缀和后缀包含的所有字符都要相同,s[0]=s[1]=⋯=s[l]=s[r]=s[r+1]=⋯=s[n−1]s[0] = s[1] = \cdots = s[l] = s[r] = s[r + 1] = \cdots = s[n-1]s[0]=s[1]=⋯=s[l]=s[r]=s[r+1]=⋯=s[n−1]。
- 同时删除前缀和后缀。
通过观察我们对 sss 进行分类讨论如下:
- sss 的长度为 111 时,假设 s=“a"s = \text{``a"}s=“a",此时按照题目的删除规则此时不能删除。
- sss 的长度大于 111 且 sss 中的所有字符均相同,假设 s=“aaaa"s = \text{``aaaa"}s=“aaaa",此时按照题目的删除规则 sss 一定可以全部删除完。
- sss 的长度大于 111 且 sss 存在字母相同的前缀与后缀,假设 s=“aaabbbccca"s = \text{``aaabbbccca"}s=“aaabbbccca",此时按照题目的删除规则最优选择是 sss 应当将前缀与后缀中连续的 ‘a’\text{`a’}‘a’ 全部删除完,删除完成后 s′=“bbbccc"s' = \text{``bbbccc"}s′=“bbbccc"。
- sss 的长度大于 111 且 sss 不存在字母相同的前缀与后缀,假设 s=“aaaccc"s = \text{``aaaccc"}s=“aaaccc",此时按照删除规则,无法进行删除。
根据以上的删除规则分类,我们设 left\textit{left}left 和 right\textit{right}right 分别指向当前待删除字符串的起始位置与结束位置,然后按照规则进行删除,当前可以删除的条件必须满足如下:
- 只有字符串的长度大于 111 时我们才进行删除,因此可以进行删除的条件一定需要满足 left<right\textit{left} < \textit{right}left<right;
- 只有存在字母相同的前缀与后缀我们才进行删除,因此可以进行删除的条件一定需要满足 s[left]=s[right]s[\textit{left}] = s[\textit{right}]s[left]=s[right]。
假设有可以进行删除的前缀和后缀时,则我们将所有字母相同的前缀与后缀全部删除,此时 left\textit{left}left 需要向右移动,right\textit{right}right 需要向左移动,并删除字符串中字母相同的前缀与后缀,直到无法删除为止。最终 left\textit{left}left 指向删除后字符串的左起点,right\textit{right}right 指向删除后字符串的右终点,剩余的字符串的长度则为 right−left+1\textit{right} - \textit{left} + 1right−left+1。
需要注意的是,如果当 sss 的长度大于 111 且 sss 中的字符全部相等时,此时需要将 sss 全部进行删除,则会出现 right=left−1\textit{right} = \textit{left} - 1right=left−1。
复杂度分析:
- 时间复杂度: O(n)O(n)O(n),其中 nnn 表示字符串的长度。我们只需遍历一遍字符串即可。
- 空间复杂度: O(1)O(1)O(1)。
class Solution:def minimumLength(self, s: str) -> int:l, r = 0, len(s) - 1while r - l >= 1 and s[l] == s[r]:now = s[l]while l <= r and s[l] == now:l += 1while l <= r and s[r] == now:r -= 1return r - l + 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-length-of-string-after-deleting-similar-ends/
相关文章:
算法刷题打卡第97天:删除字符串两端相同字符后的最短长度
删除字符串两端相同字符后的最短长度 难度:中等 给你一个只包含字符 a,b 和 c 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次: 选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相…...
WebGPU学习(3)---使用IndexBuffer(索引缓冲区)
现在让我们将 IndexBuffer 与 VertexBuffer 一起使用。演示示例 1.准备索引数据 我们用 Uint16Array 类型来准备索引数据。我们将矩形的4个点放到 VertexBuffer 中,然后根据三角形绘制顺序,组织成 0–1–2 和 0–2–3 的结构。 const quadIndexArray …...
Java代码加密混淆工具有哪些?
在Java中,代码加密混淆工具可以帮助开发者将源代码进行加密和混淆处理,以增加代码的安全性和保护知识产权。以下是一些流行的Java代码加密混淆工具: 第一款:ProGuard:ProGuard ProGuard:ProGuard…...
华为OD机试 - 高效的任务规划(Python) | 机试题+算法思路+考点+代码解析 【2023】
高效的任务规划 题目 你有 n 台机器编号为1-n,每台都需要完成一项工作, 机器经过配置后都能独立完成一项工作。 假设第i台机器你需要花 Bi 分钟进行设置, 然后开始运行,Ji分钟后完成任务。 现在,你需要选择布置工作的顺序,使得用最短的时间完成所有工作。 注意,不能同…...
ChatGPT写程序如何?
前言ChatGPT最近挺火的,据说还能写程序,感到有些惊讶。于是在使用ChatGPT有一周左右后,分享一下用它写程序的效果如何。1、对于矩阵,把减法操作转换加法?感觉不错的,能清晰介绍原理,然后写示例程…...
编译链接实战(9)elf符号表
文章目录符号的概念符号表探索前面介绍了elf文件的两种视图,以及两种视图的各自几个组成部分:elf文件有两种视图,链接视图和执行视图。在链接视图里,elf文件被划分成了elf 头、节头表、若干的节(section)&a…...
React合成事件的原理是什么
事件介绍 什么是事件? 事件是在编程时系统内发生的动作或者发生的事情,而开发者可以某种方式对事件做出回应,而这里有几个先决条件 事件对象 给事件对象注册事件,当事件被触发后需要做什么 事件触发 举个例子 在机场等待检票…...
Arduino-交通灯
LED交通灯实验实验器件:■ 红色LED灯:1 个■ 黄色LED灯:1 个■ 绿色LED灯:1 个■ 220欧电阻:3 个■ 面包板:1 个■ 多彩杜邦线:若干实验连线1.将3个发光二极管插入面包板,2.用杜邦线…...
【论文笔记】Manhattan-SDF == ZJU == CVPR‘2022 Oral
Neural 3D Scene Reconstruction with the Manhattan-world Assumption 本文工作:基于曼哈顿世界假设,重建室内场景三维模型。 1.1 曼哈顿世界假设 参考阅读文献:Structure-SLAM: Low-Drift Monocular SLAM in Indoor EnvironmentsIEEE IR…...
好消息!Ellab(易来博)官方微信公众号开通了!携虹科提供专业验证和监测解决方案
自1949年以来,丹麦Ellab一直通过全球范围内的验证和监测解决方案,协助全球生命科学和食品公司优化和改进其流程的质量。Ellab全面的无线数据记录仪,热电偶系统,无线环境监测系统,校准设备,软件解决方案等等…...
想要去字节跳动面试Android岗,给你这些面试知识点
关于面试字节跳动,我总结一些面试点,希望可以帮到更多的小伙伴,由于篇幅问题这里没有把全部的面试知识点问题都放上来!!目录:1.网络2.Java 基础&容器&同步&设计模式3.Java 虚拟机&内存结构…...
Java的Lambda表达式的使用
Lambda表达式是Java 8中引入的一个重要特性,它是一种简洁而强大的语法结构,可以用于替代传统的匿名内部类。 Lambda表达式的语法结构如下: (parameters) -> expression或者 (parameters) -> { statements; }其中,paramet…...
Spring MVC 源码 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
HandlerMapping 组件HandlerMapping 组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是 Objec…...
超店有数,为什么商家要使用tiktok达人进行营销推广呢?
近几年互联网发展萌生出更多的短视频平台,而tittok这个平台在海外也越来越火爆。与此同时,很多商家也开始用tiktok进行营销推广。商家使用较多的方式就是达人营销,这种方法很常见且转化效果不错。那为什么现在这么多商家喜欢用tiktok达人进行…...
【分享】订阅万里牛集简云连接器同步企业采购审批至万里牛系统
方案场景 面临着数字化转型的到来,不少公司希望实现业务自动化需求,公司内部将钉钉作为办公系统,万里牛作为ERP系统,两个系统之前的数据都储存在各自的后台,导致数据割裂,数据互不相通,人工手动…...
C++类和对象_02----对象模型和this指针
目录C对象模型和this指针1、成员变量和成员函数分开存储1.1、空类大小1.2、非空类大小1.3、结论2、this指针概念2.1、解决名称冲突2.2、在类的非静态成员函数中返回对象本身,可使用return *this2.3、拷贝构造函数返回值为引用的时候,可进行链式编程3、空…...
瑞芯微RK3568开发:烧录过程
进入rk3568这款芯片的烧录模式共有3种方式,先讲需要准备的环境要求。 一、软硬件环境 1、配套sdk版本的驱动DriverAssitant_vx.x.x和RKDevTool_Release_vx.x,版本不对应可能无法烧录,建议直接在sdk压缩包里获取; 2、如果正确安…...
【数据结构】——树和二叉树的概念
目录 1.树概念及结构 1.1树的概念 1.2 树的相关性质 1.3 树的表示 1.4 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1二叉树概念 2.2 特殊的二叉树 2.3 二叉树的性质 1.树概念及结构 1.1树的概念 树是一种非线性的数据结构…...
Meta分析在生态环境领域里的应用
Meta分析(Meta Analysis)是当今比较流行的综合具有同一主题的多个独立研究的统计学方法,是较高一级逻辑形式上的定量文献综述。20世纪90年代后,Meta分析被引入生态环境领域的研究,并得到高度的重视和长足的发展&#x…...
PrivateLoader PPI服务发现RisePro恶意软件窃取分发信息
称为PrivateLoader的按安装付费(PPI)软件下载器服务正用于恶意软件RisePro的信息窃取。Flashpoint 于 2022 年 12月13日发现了新的窃取者,此前发现了在名为Russian Market的非法网络犯罪市场上使用该恶意软件泄露的“几组日志”。RisePro是一…...
springboot+vue基于web的蛋糕商城论坛交流系统的设计系统
目录同行可拿货,招校园代理 ,本人源头供货商系统功能模块分析核心功能模块特色功能实现技术难点解决方案性能优化措施项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 系统功能模块分析 …...
5个关键步骤:OpenCore Legacy Patcher旧Mac设备系统升级全攻略
5个关键步骤:OpenCore Legacy Patcher旧Mac设备系统升级全攻略 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果公司对旧款Mac设备的系统支…...
实战指南:为spring boot项目快速配置最优jdk环境,助力应用高效部署
最近在准备一个Spring Boot项目时,发现JDK环境配置这个看似简单的环节其实藏着不少学问。特别是当项目需要兼顾开发效率和生产环境稳定性时,合理的JDK配置方案就显得尤为重要。今天就来分享下我的实战经验,以及如何利用工具快速搞定这些配置。…...
从取证到防御:实战解析BadUSB攻击与USB流量异常检测(Wireshark实战)
从取证到防御:实战解析BadUSB攻击与USB流量异常检测(Wireshark实战) 在企业内网安全防护中,USB设备带来的威胁往往被低估。去年某金融机构遭遇的供应链攻击事件中,攻击者通过伪装成键盘的BadUSB设备,在3分钟…...
Vue3项目实战:5分钟搞定DeepSeek API对接,打造你的专属AI聊天助手
Vue3项目实战:5分钟搞定DeepSeek API对接,打造你的专属AI聊天助手 最近在重构个人博客时,突然想到如果能给访客加个智能问答助手应该挺酷的。作为一个长期混迹开源社区的全栈开发者,我习惯性先搜了圈现有方案——结果发现DeepSeek…...
GLM-4.7-Flash效果展示:中文诗歌格律检测+不合格处自动标注与修改建议
GLM-4.7-Flash效果展示:中文诗歌格律检测不合格处自动标注与修改建议 1. 引言:当AI遇见古典诗词 你有没有想过,让一个AI来当你的诗词老师?不是那种只会背诗的AI,而是能一眼看出你写的诗哪里平仄不对、哪里押韵出错的…...
xiaomusic设备DID配置故障排除与优化指南
xiaomusic设备DID配置故障排除与优化指南 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic xiaomusic作为一款开源的小爱音响音乐服务工具,让用户能够通过…...
LVGL V8项目实战:手把手教你用CLion配置CMake,集成Gui Guider生成的UI文件(含避坑指南)
LVGL V8项目实战:CLion与CMake深度集成Gui Guider UI文件的完整指南 当你在嵌入式GUI开发中频繁往返于设计工具与代码编辑器之间时,是否经历过这样的困境:在Gui Guider中精心设计的界面,移植到LVGL项目后却遭遇编译错误、资源路径…...
Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析+缺货识别+SKU自动计数
Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析缺货识别SKU自动计数 1. 零售场景中的视觉理解挑战 在零售行业,货架管理一直是运营效率的关键指标。传统的人工巡检方式存在几个明显痛点: 效率低下:一个中型超市需要2-3小时完成…...
小白程序员必看:大模型“语义崩塌”陷阱与收藏攻略!
本文深入解析了“语义崩塌”现象,即在大模型处理海量数据时,向量语义失去区分度导致搜索失效。以斯坦福RAG研究为例,揭示高维空间下“维度灾难”如何导致相关性计算失效,影响企业级应用。文章提出分层检索和基于图谱的检索作为解决…...
