最長回文串之暴力法,中心擴充套件,動態規劃

2021-10-01 23:56:06 字數 2129 閱讀 2071

正讀倒讀都一樣的整數 ,這個應該是最簡單的介紹了吧。

用程式怎麼簡單實現呢?

示例 1:

輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

示例 2:

輸入: 「cbbd」

輸出: 「bb」

public

class

isplalindrome

public

static

boolean

isplalindrome

(string str)

//所有位除奇數字時的中間位均對應 返回true

return

true;}

}

這個程式應該不難理解

* 求解字串的最長回文串----暴力法 o(n^3)

* 通過兩層迴圈找出字串的所有子串 對每乙個子串進行判斷

* 將是回文串的子串儲存 當有新的回文串時,比較記錄中的回文串和當前回文串的長度

* 用較長的串替換當前串 如果兩串長度相同,保留舊的

* ps:如果想儲存所有的回文串 可以修改記錄回文串的結構為string陣列(鍊錶、hash表都可以)

public

static string longestplalindrome

(string original)

//將字串轉換為字元陣列

char

oriarray=original.

tochararray()

;int first=0;

int end=0;

//當前字串中回文串的始末位置 包含末位置

for(

int i=

0;i1;i++

)//兩次迴圈 查詢字串的所有子串

if(left>=right)

//是否比較完成 是字串是否為回文串的判斷條件}}

}//查詢結束 將陣列轉化為字串返回

return string.

valueof

(oriarray, first, end+1)

;}

動態規劃不是演算法,是一種方法

為了改進暴力法,我們首先觀察如何避免在驗證回文時進行不必要的重複計算。考慮 「ababa」 這個示例。如果我們已經知道 「bab」 是回文,那麼很明顯, 「ababa」 一定是回文,因為它的左首字母和右尾字母是相同的。

先看**吧

public

static string longestpalindrome2

(string s)}}

}return ret;

}

看懂了嗎?一維陣列?二維陣列?如果要計算的字串放到二位陣列裡面,你會驚奇的發現?s[a,b]是回文的話,是s[a]=s[b],軸對稱的。

事實上,只需使用恆定的空間,我們就可以在 o(n^2)的時間內解決這個問題。我們觀察到回文中心的兩側互為映象。因此,回文可以從它的中心展開,並且只有 2n - 12n−1 個這樣的中心。

public

static string longestpalindrome

(string s)

int start =

0, end =0;

//子串在原字串中的定位

for(

int i =

0; i < s.

length()

; i++

)//以上是不懂意思

}return s.

substring

(start, end +1)

;}/* * @author liuhaidong

* @description 中心結點法

* @date 9:50 2019/9/16 0016

**/private

static

intexpandaroundcenter

(string s,

int left,

int right)

return r - l -1;

}

就是那中間數,然後兩邊比較

最長回文子串(暴力法)

求最長回文子串最簡單最暴力的方法就是遍歷每乙個子串,看看這個子串是不是回文,是的話這個子串的長度有沒有最大的長度max大,遍歷每乙個子串的時間複雜度是o n 2 判斷乙個子串是不是回文子串的時間複雜度是o n 這三個for迴圈巢狀在一起所以時間複雜度為o n 3 include include in...

最長回文子串,中心擴充套件法 C語言

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 因為是找回文子串,所以使用中心擴充套件法,中心擴充套件有兩種,一種是以單個字元 i,i 為中心,乙個是...

回文串之中心擴充套件法

中心擴充套件法可以幫助減少在回文子串中暴力遍歷的一次迴圈,在普通暴力遍歷中,我們需要兩次迴圈分別確定左指標和右指標 即回文子串的左右邊界 然後還有一次迴圈向中間靠攏判斷。中心擴充套件法將向中心靠攏的這一步改為了由中心向兩邊延申,由於回文子串有奇數和偶數之分,所以中心擴充套件法的起始點需要分兩種情況討...