LeetCode 5:最長回文子串

1、題目描述

給你一個字符串 s,找到 s 中最長的 回文 子串。

示例 1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
示例 2:
輸入:s = "cbbd"
輸出:"bb"

2、中心擴展法解題

  • 解題思路:回文中心的兩側互相對稱。因此,回文可以從他的中心展開,并且只有 2n-1 個這樣的中心(一個元素為中心的情況有 n 個,兩個元素為中心的情況有 n-1 個)
class Solution {
public:int expand(const std::string& s, int l, int r) {while(l >= 0 && r < s.length() && s[l] == s[r]) {--l;++r;}// 這里需要注意邊界問題處理,代碼走到這里時,l、r相比回文串的索引都移動了一位return r - l - 1;
}
std::string longestPalindrome(std::string s) {int len = s.length();int m = 0, index = 0;for (int i = 0; i < len; ++i) {int l1 = expand(s, i, i);int l2 = expand(s, i, i + 1);if(std::max(l2, l1) > m) {index = i - (std::max(l2, l1) - 1) / 2;m = std::max(l2, l1);}}return s.substr(index, m);
}
};

3、Dp解題

  • 初始狀態:
    1)dp[i][i]=1; //單個字符是回文串
    2)dp[i][i+1]=1 if s[i]=s[i+1]; //連續兩個相同字符是回文串
std::string longestPalindrome_dp(std::string s) {int len = s.length();int max = 1, index = 0;std::vector<std::vector<std::uint8_t>> dp = std::vector<std::vector<std::uint8_t>>(len, std::vector<std::uint8_t>(len, 0));for (int i = 0; i < len; ++i) {dp[i][i] = 1;if(i + 1 < len && s[i] == s[i+1]) {dp[i][i+1] = 1;max = 2;index = i;}}for(int i = 3; i <= len; i++) {for(int j = i - 1; j < len; j++) {if(s[j] == s[j - i + 1] && dp[j-i+2][j-1] == 1) {max = i;index = j - i + 1;dp[j-i+1][j]=1;}}}return s.substr(index, max);}
  • 總結,一直對這種斜線充填數據的DP不是很理解,通過這道題目悟出來,一般和個數有關的場景使用這種方式初始化數據。可以理解為是那種確定步長時怎么怎么樣,因為這種方式有一個特點,那就是i-j的差值是固定的,也就是說dp[i][j]的含義是[i, j]之間的數據滿足什么樣的條件。

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

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

相關文章

簡易 Python 爬蟲實現,10min可完成帶效果源碼

目錄 準備工作 編寫爬蟲代碼 運行爬蟲 查看結果 遇到的問題及解決 總結 前言和效果 本文記錄了使用 Python 實現一個簡單網頁爬蟲的過程&#xff0c;目標是爬取 quotes.toscrape.com 的名言和作者&#xff0c;并將結果保存到文本文件。以下是完整步驟&#xff0c;包含環境…

【KWDB 創作者計劃】_上位機知識篇---Docker容器

文章目錄 前言1. Docker 容器是什么&#xff1f;隔離性輕量級可移植性可復用性 2. Docker 核心概念鏡像容器倉庫Dockerfile 3. Docker 基本使用(1) 安裝 Docker(2) 容器生命周期管理(3) 鏡像管理(4) 進入容器內部(5) 數據持久化&#xff08;掛載卷&#xff09;(6) 網絡管理 4. …

樹莓派練習

1.守護進程 守護進程含義&#xff1a;守護進程在樹莓派上電后開始運行&#xff0c;斷電后結束運行的進程&#xff0c;即使你的終端退出也不會停止&#xff0c;我們可以手動關閉它 使用nohup創建守護進程 先創建一個c語言文件&#xff08;long_task.c&#xff09; #include …

詳細解釋瀏覽器是如何渲染頁面的?

渲染流程概述 渲染的目標&#xff1a;將HTML文本轉化為可以看到的像素點 當瀏覽器的網絡線程收到 HTML 文檔后&#xff0c;會產生一個渲染任務&#xff0c;并將其傳遞給渲染主線程的消息隊列。在事件循環機制的作用下&#xff0c;渲染主線程取出消息隊列中的渲染任務&#xff0…

java+postgresql+swagger-多表關聯insert操作(九)

入參為json&#xff0c;然后根據需要對多張表進行操作&#xff1a; 入參格式&#xff1a; {"username": "車主01","usertel": "11111111111","useridtype": "2","useridcard": null,"proname&qu…

JavaSpring 中使用 Redis

創建項目 配置 Redis 服務地址 創建 Controller 類 由于當前只是些簡單的測試代碼&#xff0c;所以就不進行分層了&#xff0c;只創建一個 Controller 來實現 jedis 通過 jedis 對象里的各種方法來操作 Redis 此處通過 StringRedisTemplate 來操作 Redis 最原始提供的類是 Re…

AI文生圖工具推薦

一、AI文生圖技術實現原理 AI文生圖&#xff08;Text-to-Image&#xff09;基于生成對抗網絡&#xff08;GAN&#xff09;或擴散模型&#xff08;Diffusion Model&#xff09;實現&#xff0c;通過深度學習將文本描述轉化為圖像。其核心流程包括&#xff1a; 文本編碼&#xf…

數據結構——快排和歸并排序(非遞歸)

快速排序和歸并排序一般都是用遞歸來實現的&#xff0c;但是掌握非遞歸也是很重要的&#xff0c;說不定在面試的時候面試官突然問你快排或者歸并非遞歸實現&#xff0c;遞歸有時候并不好&#xff0c;在數據量非常大的時候效率就不好&#xff0c;但是使用非遞歸結果就不一樣了&a…

【筆記】網絡安全管理

計算機硬件中,運算器和控制器通常集成在一塊芯片內,一般稱為()。 數據庫DB、數據庫系統DBS、數據庫管理系統DBMS,三者之間的關系是()。 OSI/RM體系結構中的網絡層與TCP/IP體系結構中的()功能相同。 三級系統應按照等保2.0要求采用密碼技術通信過程中數據的()。 …

.net core web api 數據驗證(DataAnnotations)

目錄 一、什么是 DataAnnotations&#xff1f; 二、擴展驗證邏輯&#xff08;自定義驗證器&#xff09; 一、什么是 DataAnnotations&#xff1f; DataAnnotations 是一組特性&#xff08;Attributes&#xff09;&#xff0c;用于在模型類上定義驗證規則。主要用于屬性級別的…

小白從0學習網站搭建的關鍵事項和避坑指南

以下是針對小白從零學習網站搭建時需要注意的關鍵事項和避坑指南&#xff0c;幫助你高效學習、少走彎路&#xff1a; 一、學習路徑注意事項 不要跳過基礎 誤區&#xff1a;直接學習框架&#xff08;如 React、Laravel&#xff09;而忽視 HTML/CSS/JS 基礎。 正確做法&#xff…

深入剖析JavaScript內存泄漏:識別、定位與實戰解決

在JavaScript的世界里&#xff0c;開發者通常不必像使用C那樣手動管理內存的分配和釋放&#xff0c;這得益于JavaScript引擎內置的垃圾回收&#xff08;Garbage Collection, GC&#xff09;機制。然而&#xff0c;這并不意味著我們可以完全忽視內存管理。“自動"不等于&qu…

2025-04-19 Python 強類型編程

文章目錄 1 方法標注1.1 參數與返回值1.2 變參類型1.3 函數類型 2 數據類型2.1 內置類型2.2 復雜數據結構2.3 類別選擇2.4 泛型 3 標注方式3.1 注釋標注3.2 文件標注 4 特殊情形4.1 前置引用4.2 函數標注擴展4.3 協變與逆變4.4 dataclass 5 高級內容5.1 接口5.2 泛型的協變/逆變…

ETF價格相關性計算算法深度分析

1. 引言 在金融市場中&#xff0c;相關性就像是資產之間“跳舞”的默契程度。想象一下兩位舞者&#xff08;ETF&#xff09;&#xff0c;有時步伐一致&#xff0c;有時各跳各的。對于管理大規模資金的投資組合而言&#xff0c;準確理解ETF之間的“舞步同步性”對于風險管理、資…

上海人工智能實驗室:LLM無監督自訓練

&#x1f4d6;標題&#xff1a;Genius: A Generalizable and Purely Unsupervised Self-Training Framework For Advanced Reasoning &#x1f310;來源&#xff1a;arXiv, 2504.08672 &#x1f31f;摘要 &#x1f538;推進LLM推理技能引起了廣泛的興趣。然而&#xff0c;當前…

【WPF】 在WebView2使用echart顯示數據

文章目錄 前言一、NuGet安裝WebView2二、代碼部分1.xaml中引入webview22.編寫html3.在WebView2中加載html4.調用js方法為Echarts賦值 總結 前言 為了實現數據的三維效果&#xff0c;所以需要使用Echarts&#xff0c;但如何在WPF中使用Echarts呢&#xff1f; 一、NuGet安裝WebV…

2025年3月 Python編程等級考試 2級真題試卷

2025年3月青少年軟件編程Python等級考試&#xff08;二級&#xff09;真題試卷 題目總數&#xff1a;37 總分數&#xff1a;100 選擇題 第 1 題 單選題 老師要求大家記住四大名著的作者&#xff0c;小明機智地想到了可以用字典進行記錄&#xff0c;以下哪個選項的字典…

6. 話題通信 ---- 使用自定義msg,發布方和訂閱方cpp,python文件編寫

1)在功能包下新建msg目錄&#xff0c;在msg目錄下新建Person.msg,在Person.msg文件寫入&#xff1a; string name uint16 age float64 height 2)修改配置文件 2.1) 功能包下package.xml文件修改 <build_depend>message_generation</build_depend><exec_depend…

多線程使用——線程安全、線程同步

一、線程安全 &#xff08;一&#xff09;什么是線程安全問題 多個線程&#xff0c;同時操作同一個共享資源的時候&#xff0c;可能會出現業務安全的問題。 &#xff08;二&#xff09;用程序摹擬線程安全問題 二、線程同步 &#xff08;一&#xff09;同步思想概述 解決線…

4. 話題通信 ---- 發布方和訂閱方cpp文件編寫

本節對應趙虛左ROS書籍的2.1.2 以10hz,發布消息和消息的訂閱 1) 在功能包的src文件夾下&#xff0c;新建cpp文件&#xff0c;并且寫入 #include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char *argv[]) {setlocale(LC_ALL,"&…