Problem: 1750. 删除字符串两端相同字符后的最短长度1750. 删除字符串两端相同字符后的最短长度 1750. 删除字符串两端相同字符后的最短长度

思路

双指针遍历

解题过程

模拟题目描述的过程,使用指针 l, r 指向首尾两端。

如果相同就向中心移动。为了尽可能的删除多余的前缀和后缀,需要将两侧字符相等都删除。

如果不同,当前长度就是最短长度,直接返回。

实现过程

双指针初始化:l 指向字符串开头,r 指向结尾。

循环条件:当 l < r 时循环(表示还有可操作的空间)。

字符匹配:

    若 s[l] == s[r]:删除这对字符(l++, r--),然后跳过所有连续的相同字符:

    左侧跳过:while (s[l] == s[l - 1] && l <= r) l++(删除前缀的连续相同字符)。

    右侧跳过:while (s[r] == s[r + 1] && l <= r) r--(删除后缀的连续相同字符)。

    若 s[l] != s[r]:无法继续删除,直接返回剩余长度 r - l + 1。

    循环结束处理:

      若 r < l,说明字符串被完全删除,返回 0。

      若 r == l,说明剩余一个字符,返回 1。

      边界情况思考(重要)

      为什么需要在删除连续相同字符的时候需要判断条件 l<=r ?

      • 防止越界和无效操作:在跳过连续字符时,需确保指针未交叉(l 不超过 r)。若 l > r,继续移动指针会访问无效内存或导致逻辑错误。
        • 处理剩余字符:当 l == r 时,需检查该字符是否与删除的字符相同(可能属于前缀或后缀的一部分)。

          案例 1:字符串 "aaa"(全相同字符)

          初始:l=0, r=2(字符 'a' 匹配)。

          删除两端:l=1, r=1。

          左侧跳过:s[1]=='a' 且 l<=r(1<=1),l++ → l=2(此时 l>r)。

          结果:返回 0(完全删除)。

          关键:l<=r 允许在 l==r 时进入循环,确保中间字符被正确处理。

          案例 2:字符串 "aba"(中间字符不同)

          初始:l=0, r=2(字符 'a' 匹配)。

          删除两端:l=1, r=1。

          左侧跳过:s[1]=='b' != s[0]=='a',不移动。

          右侧跳过:s[1]=='b' != s[2]=='a',不移动。

          结果:返回 1(剩余中间字符 'b')。

          案例 3:字符串 "abba"(两对相同字符)

          第一轮:l=0, r=3('a'=='a'),删除后 l=1, r=2。

          第二轮:l=1, r=2('b'=='b'),删除后 l=2, r=1(此时 l>r)。

          结果:返回 0(完全删除)。

          code

          python

          class Solution:def minimumLength(self, s: str) -> int:n = len(s)l = 0r = n - 1while l < r:cl = s[l]cr = s[r]if s[l] == s[r]:l += 1r -= 1while s[l] == s[l-1] and l<=r:l+=1while s[r] == s[r+1] and l<=r:r-=1else:return r-l+1return 0 if r<l else 1

          c++

          class Solution {
          public:int minimumLength(string s) {int n = s.length();int l = 0, r = n - 1;while (l < r) {char cl = s[l], cr = s[r];if (cl == cr) {l++, r--;while (s[l] == s[l - 1] && l <= r)l++;while (s[r] == s[r + 1] && l <= r)r--;} else {return r - l + 1;}}return r < l ? 0 : 1;}
          };

          复杂度

          • 时间复杂度: O(n)
          • 空间复杂度: O(1)

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

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

            相关文章

            【mysql】通过information_schema.tables查询表的统计信息

            1 查询表的统计信息 information_schema.tables 是 MySQL 中的一个系统视图&#xff0c;包含数据库中所有表的信息。 如何查询当前数据库的所有表信息&#xff1a; SELECT * FROM information_schema.tables WHERE table_schema DATABASE(); 返回的字段有&#xff1a; 字段名…

            “地标界爱马仕”再启:世酒中菜联袂陈汇堂共筑新会陈皮顶奢产业

            “地标界爱马仕”再启战略新篇&#xff1a;世酒中菜联袂陈汇堂&#xff0c;共筑新会陈皮顶奢产业生态 ——中世国际与陈汇堂股权合作签约仪式在国际地理标志服务基地举行 江门市新会区&#xff0c;2025年6月20日——被誉为“地标界爱马仕”的全球顶奢品牌运营商世酒中菜 &…

            倒计时 效果

            实现HTML <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>信质集团SAP/ERP切换倒计时</title…

            高性能群集部署技术-Nginx+Tomcat负载均衡群集

            目录 #1.1案例概述 1.1.1案例前置知识点 1.1.2案例环境 #2.1案例实施 2.1.1实施准备 2.1.2查看JDK是否安装 2.1.3安装配置Tomcat 2.1.4Tomcat主配置文件说明 2.1.5建立Java的Web站点 #3.1NginxTomcat负载均衡&#xff0c;动静分离群集的实验案例 3.1.1案例概述 3.1.2案例环境…

            《Go语言圣经》函数值、匿名函数递归与可变参数

            《Go语言圣经》函数值、匿名函数递归与可变参数 函数值&#xff08;Function Values&#xff09; 在 Go 语言中&#xff0c;函数被视为第一类值&#xff08;first-class values&#xff09;&#xff0c;这意味着它们可以像其他值一样被操作&#xff1a;拥有类型、赋值给变量、…

            vtk和opencv和opengl直接的区别是什么?

            简介 VTK、OpenCV 和 OpenGL 是三个在计算机图形学、图像处理和可视化领域广泛使用的工具库&#xff0c;但它们在功能、应用场景和底层技术上存在显著差异。以下是它们的核心区别和特点对比&#xff1a; 1. 核心功能与定位 工具核心功能主要应用领域VTK (Visualization Toolk…

            最新豆包大模型发布!火山引擎推出Agent开发新范式

            Datawhale大会 2025火山引擎 Force 原动力大会 6月11日-12日&#xff0c;北京国家会议中心人山人海&#xff0c;2025 火山引擎 Force 原动力大会如约而至。 作为开发者社区的一员&#xff0c;这场大会上的一系列新发布让我们感受到了&#xff1a;这个 Agent 技术落地元年的关键…

            RFC4291-IPv6地址架构解说

            RFC 4291 是由互联网工程任务组&#xff08;IETF&#xff09;发布的关于 IPv6 地址架构 的标准文档。 该文档详细定义了 IPv6 地址的格式、类型、表示方法以及分配方式。 以下是对 RFC 4291 中 IPv6 地址架构的全面解析&#xff0c;包括地址格式、类型、表示方法、特殊地址以…

            简单对比 **HTTP**、**MQTT** 和 **CoAP** 这三种通信协议

            对比 HTTP、MQTT 和 CoAP 这三种通信协议&#xff0c;从 消息结构、资源占用、安全性 等方面进行全面分析。 &#x1f310; HTTP vs MQTT vs CoAP 对比 特性HTTPMQTTCoAP协议层级应用层基于 TCP应用层基于 TCP / WebSocket应用层基于 UDP (也支持 TCP)消息模式请求/响应 (客户…

            【Dify 案例】【自然语言转SQL案例】【五】【实战二】【财务管理查询商品信息数据】

            援引实战一,进行数据业务处理化 1.开始 2.自然语言转SQL的工具 3.参数提取器 4.SQL查询

            FPGA基础 -- Verilog语言要素之标识符

            一、什么是标识符&#xff08;Identifier&#xff09; 在 Verilog 中&#xff0c;标识符是用户定义的名字&#xff0c;用于标识模块、变量、端口、函数、任务、参数、宏定义等各种语言要素。 就像 C 语言的变量名、函数名一样&#xff0c;Verilog 中的标识符为 HDL 代码提供了…

            Tomcat双击startup.bat闪退的解决方法

            首先需要确认java环境是否配置正确&#xff0c;jdk是否安装正确 winR打开cmd&#xff0c;输入该命令 java -version 出现对应的版本就说明jdk配置正确 如果没有&#xff0c;则参考jdk的安装及配置 如果以上都没有问题&#xff0c;就继续排查 确认Tomcat的环境变量配置 概…

            计算机基础(三):深入解析Java中的原码、反码、补码

            计算机基础系列文章 计算机基础(一)&#xff1a;ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析 计算机基础(二)&#xff1a;轻松理解二进制、八进制、十进制和十六进制 计算机基础(三)&#xff1a;深入解析Java中的原码、反码、补码 目录 引言一、 基础概念&…

            phpstudy无法启动mysql,一启动就关闭,完美解决

            phpstudy无法启动mysql&#xff0c;一启动就关闭&#xff0c;完美解决 phpstudy的mysql无法启动&#xff0c;一启动就关闭如何解决。 问题出现的原因&#xff1a;phpstudy自带的mysql&#xff0c;可能与之前单独安装的mysql发生冲突。(之前安装的mysql已经占用3306端口) 解决方…

            mysql中的<>和!=

            在MySQL中&#xff0c;<> 运算符表示 不等于。它与 ! 运算符功能完全相同&#xff0c;都是用于比较两个表达式是否不相等。 SELECT * FROM table_name WHERE column_name <> value;当 column_name 的值不等于 value 时&#xff0c;返回该行当值相等或为 NULL 时&a…

            C#学习日记

            命名空间 知识点一 命名空间基本概念 概念 命名空间是用来组织和重用代码的 作用 就像是一个工具包&#xff0c;类就像是一件一件的工具&#xff0c;都是申明在命名空间中的 知识点二 命名空间的使用 基本语法 namespace 命名空间名 {类类 } namespace MyGame {class GameO…

            第八十二篇 大数据开发基础:树形数据结构深度解析与实战指南(附创新生活案例)

            目录 一、树的本质&#xff1a;层次化数据组织二、生活中的树形智慧&#xff1a;无处不在的层次案例1&#xff1a;图书馆图书分类系统案例2&#xff1a;电商平台商品类目树案例3&#xff1a;城市行政区域划分 三、大数据中的核心树结构1. B树&#xff1a;数据库索引的脊梁2. 决…

            从0开始学计算机视觉--Day1--计算机视觉的起源

            我们经常能听到计算机视觉这个词语&#xff0c;像数字图像处理&#xff0c;算法设计&#xff0c;深度学习等领域。但很少有人会先去了解清楚这门知识&#xff0c;而是用到什么再学什么&#xff0c;虽然这在项目进度上能节省不少时间&#xff0c;但有时候囫囵吞枣式地学习容易落…

            简单的 ​Flask​ 后端应用

            from flask import Flask, request, jsonify, session import os app Flask(__name__) app.secret_key os.urandom(24) users { 123: admin, admin: admin } # 登录接口 app.route(/login, methods[POST]) def login(): data request.get_json() username data.get(usern…

            spring-webmvc @PathVariable 典型用法

            典型用法 基础用法 GetMapping("/users/{id}") public String getUser(PathVariable Long id) {return "User ID: " id; } 请求&#xff1a;/users/1001 输出&#xff1a;User ID: 1001---- GetMapping("/users/{userId}/orders/{orderId}") …