日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【字符串】最长回文子串 ( 动态规划算法 ) ★

發布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【字符串】最长回文子串 ( 动态规划算法 ) ★ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、回文串、子串、子序列
  • 二、最長回文子串
    • 1、動態規劃算法
    • 2、動態規劃算法代碼示例





一、回文串、子串、子序列



" 回文串 ( Palindrome ) " 是 正反都一樣的字符串 , abccba , 001100 等字符串 ;


給定一個字符串 " abcd " ,

" 子串 ( SubString ) "是連續取的子字符串 , 如 : “ab” , “bc” , “cd” , “bcd” 等 , 不能跳躍字符 ; ( 連續字符 )

nnn 個字符串的子串個數是 n(n+1)2+1\cfrac{n(n+1)}{2} +12n(n+1)?+1 個 ;

" 子序列 ( SubSequence ) " 是可以非連續取字符串中的字符 , 前后順序不允許顛倒 , 如 “ad” , “bd” , “acd” 等 ; ( 非連續字符 )

nnn 個字符串的子串個數是 2n2^n2n 個 ( 集合的子集數 ) ;

驗證一個字符串是否是回文串 , 最壞的情況下需要遍歷 n2\cfrac{n}{2}2n? 次 ;

因此最暴力的方法驗證回文子串 , 就是驗證 n(n+1)2+1\cfrac{n(n+1)}{2} +12n(n+1)?+1 個子字符串是否是回文串 , 每次都要遍歷 n2\cfrac{n}{2}2n? 次 ;
暴力算法的時間復雜度是 O(n3)O(n^3)O(n3) ;





二、最長回文子串



問題鏈接 : https://www.lintcode.com/problem/200/description

給出一個字符串(假設長度最長為1000),求出它的最長回文子串,你可以假定只有一個滿足條件的最長回文串。



1、動態規劃算法


如果不使用中心線枚舉算法 , 在蠻力算法的基礎上 , 快速判定字符串是否是回文串 ;
使用基于動態規劃的算法可以實現上述要求 ;


回文串存在特點 :
兩種類型的回文串 “abba” , “abcba” , 正序 和 倒序 是一樣的 ;
回文串兩頭的字符相等 ;
回文串除去兩頭的兩個字符 , 中間部分也是回文串 ;


字符串中 iii ~ jjj 之間的字符串是回文串 ;

  • i,ji, ji,j 字符相等 ,
  • 并且 i+1i +1i+1 ~ j?1j - 1j?1 的字符串也是回文串 ;

iii ~ jjj 之間的字符串是否是回文串 , 依賴于 i+1i +1i+1 ~ j?1j - 1j?1 之間的字符串是否是回文串 ;
因此推導任意兩個索引區間 i,ji, ji,j 之間的字符串是否是回文串時 ,


i,ji, ji,j 之間的字符串是否是回文串 , 存儲在一個二維布爾數組中 ;

// 表示 n 個字符串中所有的字符索引之間是否是回文串 boolean [][] isPalindrome = new boolean[n][n];

isPalindrome[i][j] 表示 iii ~ jjj 之間的字符串是否是回文串 , 如果是回文串則設置為 true , 如果不是回文串則設置為 false ;


回文串判定條件 :

isPalindrome[i][j] = isPalindrome[i + 1][j - 1] && s.charAt(i) == s.charAt(j);

iii ~ jjj 之間的字符串是回文串 , 則 i+1i +1i+1 ~ j?1j - 1j?1 之間的字符串也是回文串 , 并且第 iii 個字符等于第 jjj 個字符 ;


動態規劃 :

這種推導公式在 動態規劃 中 , 稱為 狀態轉移方程 ;

isPalindrome 二維數組中每個元素都是一個 狀態 , 這個狀態是以區間作為狀態的標志 , 兩個維度的值分別是區間的開始索引和結束索引 ;

這種類型的動態規劃 , 又稱為 區間型動態規劃 ;


循環設計 :

iii ~ jjj 之間的字符串是否是回文串 , 依賴于 i+1i +1i+1 ~ j?1j - 1j?1 之間的字符串是否是回文串 ;

也就是 iii 依賴于 i+1i + 1i+1 , 循環時 , 不能正向循環 , 只能倒序循環 ;

先計算 iii 比較大的 , 再計算 iii 比較小的 ;


初始化操作 : 動態規劃中初始化很重要 ;

這里要考慮公式的適用性 , 上述公式

isPalindrome[i][j] = isPalindrome[i + 1][j - 1] && s.charAt(i) == s.charAt(j);

公式中使用了 i+1i + 1i+1 , j?1j - 1j?1 , 為了保證公式成立 , 字符串的字符個數至少要有 222 個 ;

初始化時最好將空字符串 , 111 個字符組成的字符串 的情況直接初始化賦值 ;

初始化單個字符字符串的狀態 :

isPalindrome[i][i] 是第 iii 個字符到第 iii 個字符之間的單個字符是否是回文串 , 顯然單個字符是回文串 ;

isPalindrome[i][i] = true

2、動態規劃算法代碼示例


代碼示例 :

class Solution {/*** @param s: 輸入字符串* @return: 返回最長回文子串*/public String longestPalindrome(String s) {if (s == null || "".equals(s)) {return null;}int n = s.length();boolean[][] isPalindrome = new boolean[n][n];int longest = 1; // 最長長度int start = 0; // 開始索引// 初始化操作, 長度為 1 的回文串for (int i = 0; i < n; i++) {isPalindrome[i][i] = true;}// 初始化操作, 長度為 2 的回文串for (int i = 0; i < n - 1; i ++) {if (s.charAt(i) == s.charAt(i + 1)) {isPalindrome[i][i + 1] = true;start = i;longest = 2;}else {isPalindrome[i][i + 1] = false;}}// 倒序遍歷for (int i = n - 1; i >= 0; i--) {// 從 i + 2 開始計算 , 之前 i , i + 1 都已經計算過了 , 從長度為 3 的區間開始計算// 注意此處如果 j >= n 時 , 不進入內層循環 // 只有在 j <= n - 1 時 , 才進入內層循環 for (int j = i + 2; j < n; j ++) {isPalindrome[i][j] = isPalindrome[i + 1][j - 1] && s.charAt(i) == s.charAt(j);if (isPalindrome[i][j] && j - i + 1 > longest) {start = i;longest = j - i + 1;}}}return s.substring(start, start + longest);} }class Main {public static void main(String[] args) {String palindrome = new Solution().longestPalindrome("mabcban");System.out.println(palindrome);} }

O(n2)O(n^2)O(n2) 時間復雜度算法;

總結

以上是生活随笔為你收集整理的【字符串】最长回文子串 ( 动态规划算法 ) ★的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久成人精品视频 | 国产精品2019 | 伊人天堂av | 国产ts网站 | 一区二区三区在线观看av | 奇米影视久久 | 欧美亚洲国产成人 | 四虎视频 | 九色porny自拍视频 | 中文字幕免费在线播放 | 亚洲精品国产乱伦 | 成人毛片18女人 | 亚洲午夜久久久久 | 97涩涩网 | 亚洲理论中文字幕 | 女人的天堂网站 | 香蕉视频在线免费看 | 日韩黄色a级片 | 男人日女人b视频 | 毛片亚洲av无码精品国产午夜 | 999精品国产 | 色吧综合网 | 天天天干| 拔插拔插影库 | 国产激情综合五月久久 | 日本xx视频 | 久久久久人妻一道无码AV | 国产成人精品午夜福利Av免费 | 亚洲成人午夜影院 | 波多野结衣乳巨码无在线 | 久久无码人妻精品一区二区三区 | 91久久久国产精品 | 欧洲人妻丰满av无码久久不卡 | 日韩极品在线 | 午夜影院啊啊啊 | 欧美色图13p| www.黄色网| 国产区一区二 | 娇妻高潮浓精白浆xxⅹ | 激情在线观看视频 | av网站导航 | av日韩精品 | 啪啪视屏 | www.日韩在线 | 色狠狠操 | 超碰在线网站 | 国产精品蜜 | 午夜理伦三级做爰电影 | 麻豆人妻少妇精品无码专区 | 深爱婷婷网 | 五月天婷婷网站 | 亚洲小说网 | www.色啪啪.com | 国产精品午夜福利视频234区 | 国产高清一 | 欧美自拍视频在线观看 | 开心激情亚洲 | 射进来av影视 | 成人免费做受小说 | 中文天堂av | 美女一二区 | 精品一区二区三区在线视频 | 日韩不卡在线观看 | 久操视频免费在线观看 | 7mav视频 | 中文字幕亚洲综合 | 国产丰满美女做爰 | 青草视频在线观看免费 | 长篇乱肉合集乱500小说日本 | 国产视频三级 | 中国18videosex极品 | 日本r级电影在线观看 | 欧美精品高清 | 人体毛片 | 一区二区三区偷拍 | 黄色a一级片| 在线成人欧美 | 精品少妇人妻av免费久久久 | 欧美性大战久久久久久 | 海角社区在线 | 免费观看全黄做爰的视频 | 欧美aⅴ视频 | 国产在线播放一区 | 亚洲私人网站 | 一级性视频 | 大陆av在线播放 | aa成人| 午夜丰满寂寞少妇精品 | 自拍99页| 欧美日韩精品中文字幕 | 日韩欧美一区二区三区四区五区 | 夏晴子在线 | 精品视频在线观看一区 | 中文字幕人成乱码熟女香港 | 香蕉视频在线播放 | 国产亚洲综合av | 欧美在线观看视频一区二区 | av免费国产 | 无码人妻丰满熟妇区96 |