【力扣05】最長回文子串

0. 引言

●子串(substring):原始字符串的一個連續子集;
●子序列(subsequence):原始字符串的一個子集。

1. 什么叫回文串

如果一個字符串正著讀和反著讀是一樣的,那它就是回文串。[1]

例如,字符串“apapa”無論從左到右還是從右到左讀取,結果均為“apapa”。以下是回文串的核心特性:

  1. 對稱性
    回文串的字符序列以中心為對稱軸鏡像對稱。若字符串長度為奇數(如“radar”),對稱軸是中間字符;若長度為偶數(如“abba”),對稱軸位于中間兩個字符之間。

假如回文的中心為 雙數,例如 abba,對稱軸是中間字符為 a?bb a,

假為回文的中心為 單數,例如 abbabde, 對稱軸是中間字符為a b b?a b d e,?

?

?

  1. 字符位置對應
    對于長度為n的回文串,第i個字符與第n?i+1個字符必須相同(1≤i≤n)。例如,字符串“noon”中,第1個字符“n”與第4個字符“n”對應,第2個字符“o”與第3個字符“o”對應。

  2. 長度無關性
    回文串的長度可以是任意正整數,包括長度為1的字符(如“a”)或空字符串(通常也被視為回文)。

2. 代碼實現

	string longestPalindrome(string s) {if (s.length() < 1){return "";}int start = 0, end = 0;for (int i = 0; i < s.length(); i++){int len1 = expandAroundCenter(s, i, i);//一個元素為中心int len2 = expandAroundCenter(s, i, i + 1);//兩個元素為中心int len = max(len1, len2);if (len > end - start){start = i - (len - 1) / 2;end = i + len / 2;}}return s.substr(start, end - start + 1);}int expandAroundCenter(string s, int left, int right){int L = left, R = right;while (L >= 0 && R < s.length() && s[L] == s[R]){// 計算以left和right為中心的回文串長度L--;R++;}return R - L - 1;}

3. 逐行解析

string longestPalindrome(string s) 
{
  • 功能:主函數,輸入字符串s,返回其中最長的回文子串。

if (s.length() < 1)
{return "";
}

  • 解釋:如果字符串長度小于1(即為空),直接返回空字符串。

int start = 0, end = 0;

  • 功能startend用于記錄當前找到的最長回文子串的起始和結束索引。

for (int i = 0; i < s.length(); i++)
{int len1 = expandAroundCenter(s, i, i); // 奇數長度回文中心int len2 = expandAroundCenter(s, i, i + 1); // 偶數長度回文中心int len = max(len1, len2);
  • 功能:對每個字符i,分別計算以它為中心的奇數長度回文(len1)和以它及其下一個字符為中心的偶數長度回文(len2),取兩者中的較大值作為當前中心的最大回文長度。

if (len > end - start)
{start = i - (len - 1) / 2;end = i + len / 2;
}
  • start:計算當前回文的起始位置。對于長度為len,中心點在i處,起始位置為i - (len-1)/2
  • end:計算當前回文的結束位置,為i + len / 2

int expandAroundCenter(string s, int left, int right)
{int L = left, R = right;while (L >= 0 && R < s.length() && s[L] == s[R]){L--;R++;}return R - L - 1;
}
  • 功能:以leftright為左右中心,向兩邊擴展,計算最長回文的長度。
  • 過程
    • 初始時,L = left,?R = right.
    • s[L] == s[R]且未超出字符串邊界時,繼續向外擴展。
    • 循環結束后,返回當前回文長度:R - L - 1.

參考文獻

[1]最長回文子串 C / C++

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78944.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

統計銷量前十的訂單

傳入參數&#xff1a; 傳入begin和end兩個時間 返回參數 返回nameList和numberList兩個String類型的列表 controller層 GetMapping("/top10")public Result<SalesTop10ReportVO> top10(DateTimeFormat(pattern "yyyy-MM-dd") LocalDate begin,Dat…

【HDFS入門】HDFS核心組件Secondary NameNode角色職責與運行機制解析

目錄 1 Secondary NameNode的角色定位與常見誤解 2 核心職責詳解 2.1 核心功能職責 2.2 與NameNode的協作關系 3 運行機制深度剖析 3.1 檢查點觸發機制 3.2 元數據合并流程 4 與Hadoop 2.0 HA架構的對比 5 配置調優指南 5.1 關鍵配置參數 5.2 性能優化建議 6 實踐應…

MySQL存儲引擎:存儲什么意思?引擎什么意思?存儲引擎是什么?在MySQL中有什么作用?

MySQL存儲引擎詳解 一、術語解析 “存儲”與“引擎”的漢語詞典解釋 1. 存儲&#xff08;chǔ cn&#xff09; 漢語詞典釋義&#xff1a; ? 動詞&#xff1a; ? 存放、保存&#xff08;將物品或信息放置在特定地方&#xff0c;以便后續使用&#xff09;。 ? 例&#xff…

測試第三課-------自動化測試相關

作者前言 &#x1f382; ??????&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ?&#x1f382; 作者介紹&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

Hive null safe的用法

總結: null safe 是用<> 代表比較&#xff0c;而不是用 。null <> null 返回 true&#xff0c; 而 null null 代表 false。 NULL 和任意字符比較都返回 NULL&#xff0c;而不是 true 或者 false。如 SELECT 1 1, NULL NULL, 1 NULL;輸出 true NULL NULL如果我…

LINUX基礎 [四] - Linux工具

目錄 軟件包管理器yum Linux開發工具vim vim的基本概念 vim的三種常用模式 vim的簡單配置 vim常用模式的基本操作 命令模式 底行模式 處理vim打開文件報錯的問題 Linux編譯器-gcc/g使用 為什么我們可以用C/C做開發呢&#xff1f; 預處理&#xff08;進行宏替換&#x…

RocketMQ 03

今天是2025/04/14 21:58 day 20 總路線請移步主頁Java大綱相關文章 今天進行RocketMQ 6,7,8 個模塊的歸納 最近在忙畢設&#xff0c;更新有點慢&#xff0c;見諒 首先是RocketMQ 的相關內容概括的思維導圖 6. 安全機制 6.1 ACL 訪問控制 核心功能 權限分級&#xff1a;通過…

深入理解瀏覽器的 Cookie:全面解析與實踐指南

在現代 Web 開發中&#xff0c;Cookie 扮演著舉足輕重的角色。它不僅用于管理用戶會話、記錄用戶偏好&#xff0c;還在行為追蹤、廣告投放以及安全防護等諸多方面發揮著重要作用。隨著互聯網應用場景的不斷豐富&#xff0c;Cookie 的使用和管理也日趨復雜&#xff0c;如何在保障…

在企業級部署中如何優化NVIDIA GPU和容器環境配置:最佳實踐與常見誤區20250414

在企業級部署中如何優化NVIDIA GPU和容器環境配置&#xff1a;最佳實踐與常見誤區 引言 隨著AI和深度學習技術的迅速發展&#xff0c;企業對GPU加速計算的需求愈加迫切。在此過程中&#xff0c;如何高效地配置宿主機與容器化環境&#xff0c;特別是利用NVIDIA GPU和相關工具&…

【秣厲科技】LabVIEW工具包——OpenCV 教程(19):拾遺 - imgproc 基礎操作(上)

文章目錄 前言imgproc 基礎操作&#xff08;上&#xff09;1. 顏色空間2. 直方圖3. 二值化4. 腐蝕、膨脹、開閉運算5. 梯度與輪廓6. 簡易繪圖7. 重映射 總結 前言 需要下載安裝OpenCV工具包的朋友&#xff0c;請前往 此處 &#xff1b;系統要求&#xff1a;Windows系統&#x…

Linux 下 Module 工具的介紹與使用

參考&#xff1a; https://www.fasteda.cn/post/22.html https://modules.readthedocs.io/en/latest/module.html Linux 下 Module 工具的介紹與使用 一、前言 在 Linux 中&#xff0c;當同一款編輯器、運行庫、軟件存在多個版本且多個版本都需要在不同的場景或人員使用時&a…

空間信息可視化——WebGIS前端實例(一)

技術棧&#xff1a;原生HTML 源代碼&#xff1a;CUGLin/WebGIS: This is a project of Spatial information visualization 4 全國貧困縣可視化系統 4.1 系統設計思想 黨的十九大報告明確指出,要“確保到2020年我國現行標準下農村貧困人口實現脫貧,貧困縣全部摘帽,解決區域…

單雙線程的理解 和 lua基礎語法

1.什么是單進程 &#xff0c;什么是多進程 當一個程序開始運行時&#xff0c;它就是一個進程&#xff0c;進程包括運行中的程序和程序所使用到的內存和系統資源。而一個進程又是由單個或多個線程所組成的。 1.1 像apache nginx 這類 服務器中間件就是多進程的軟件 &#xff0…

【Linux】VIM 編輯器,編輯加速引擎

目錄 vim中的五種常見模式介紹VIM的基本操作安裝VIMVIM中的模式切換 VIM指令集命令模式指令集底行模式指令集視圖模式指令集替換和插入模式 end vim中的五種常見模式介紹 正常/普通/命令模式【Normal mode】 控制屏幕光標的移動&#xff0c;字符、字或行的刪除&#xff0c;移動…

【Linux網絡】Socket 編程TCP

&#x1f308;個人主頁&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列專欄&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目錄 TCP socket API 詳解 socket(): bind(): listen(): accept(): connect V0…

記一次 .NET某固高運動卡測試 卡慢分析

一&#xff1a;背景 1. 講故事 年前有位朋友找到我&#xff0c;說他們的程序會偶發性卡慢 10s 鐘&#xff0c;在某些組合下會正常&#xff0c;某些組合下就會出現問題&#xff0c;解釋不了其中的原因&#xff0c;讓我幫忙看下怎么回事&#xff1f;截圖如下&#xff1a; priva…

硬件知識積累 單片機+ 光耦 + 繼電器需要注意的地方

1. 電路圖 與其數值描述 1.1 單片機引腳信號為 OPtoCoupler_control_4 PC817SB 為 光耦 繼電器 SRD-05VDC-SL-A 的線圈電壓為 67Ω。 2. 需注意的地方 1. 單片機的推挽輸出的電流最大為 25mA 2. 注意光耦的 CTR 參數 3. 注意繼電器線圈的 內阻 4. 繼電器的開啟電壓。 因為光耦…

IP組播技術與internet

1.MAC地址分為三類&#xff1a;廣播地址&#xff1b;組播地址&#xff1b;單播地址 2.由一個源向一組主機發送信息的傳輸方式稱為組播。 3.組播MAC地址&#xff0c;第一個字節的最后一位為1&#xff1b; 單播MAC地址&#xff0c;第一個字節的最后一位為0&#xff1b; 4.不能…

vue3+vite+ts使用daisyui/tailwindcss

vite創建vue3腳手架 npm init vitelatest myVue3 – --template vue cd .\myVue3\ npm i npm run dev 安裝tailwindcss/daisyui 依賴安裝 npm install -D tailwindcss postcss autoprefixer daisyui npx tailwindcss init -p 這條命令將生成postcss.config.js(因為加了…

大數據(7)Kafka核心原理揭秘:從入門到企業級實戰應用

目錄 一、大數據時代的技術革命1.1 消息中間件演進史1.2 Kafka核心設計哲學 二、架構深度解構2.1 核心組件拓撲2.1.1 副本同步機制&#xff08;ISR&#xff09; 2.2 生產者黑科技2.3 消費者演進路線 三、企業級應用實戰3.1 金融行業實時風控3.2 物聯網數據管道 四、生產環境優化…