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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【字符串】最长回文子串 ( 蛮力算法 )

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

文章目錄

  • 一、回文串、子串、子序列
  • 二、最長回文子串
    • 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 個 ( 集合的子集數 ) ;





二、最長回文子串



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

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



1、蠻力算法


蠻力算法 :

① 先獲取所有的子串 ; 嵌套兩層循環 , 外層循環起點索引 , 內層循環終點索引 , 將 n(n+1)2+1\cfrac{n(n+1)}{2} +12n(n+1)?+1 個子串都遍歷出來 ; 該操作是 O(n2)O(n^2)O(n2) 的算法復雜度 ;

② 驗證子串是否是回文串 ; 使用 相向雙指針算法 , 設置兩個指針 , 左指針指向字符串開始位置 , 右指針指向字符串結束位置 , 對比左右指針是否相等 , 如果相等 , 左指針遞增 , 右指針遞減 , 繼續判定指向的字符是否相等 ; 該操作是 O(n)O(n)O(n) 的算法復雜度 ;

上述操作總的 時間復雜度是 O(n3)O(n^3)O(n3) ; 面試的時候寫這個算法 , 基本就涼了 ;


嵌套循環 , 外層循環必須從長度最長的開始進行 , 內層循環從 000 索引開始 ;


代碼示例 :

public class Solution {/*** @param s: input string* @return: a string as the longest palindromic substring*/public String longestPalindrome(String s) {if (s == null) {return null;}for (int length = s.length(); length > 0; length--) {for (int start = 0; length + start <= s.length(); start++) {if (isPalindrome(s, start, start + length - 1)) {return s.substring(start, start + length);}}}return "";}private boolean isPalindrome(String s, int left, int right) {while(left < right && s.charAt(left) == s.charAt(right)) {left++;right--;}return left >= right;} }class Main{public static void main(String[] args) {String palindrome = new Solution().longestPalindrome("abb");System.out.println(palindrome);} }

O(n3)O(n^3)O(n3) 時間復雜度算法 , 耗時較長 ;



2、時間復雜度最優方案


時間復雜度最優方案 : Manacher 算法 可以在 O(n)O(n)O(n) 時間內獲得最長回文串 , 這是時間復雜度最優方案 , 但是屬于背誦問題 ; 一般面試側重與邏輯與編程能力 ;

不要求實現上述方案 ;





總結

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

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