Leetcode-1750. 刪除字符串兩端相同字符后的最短長度

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}") …