LeetCode練習 5 最長回文子串

2021-10-06 09:21:48 字數 1665 閱讀 1710

leetcode從三月到現在做了也大概有10%的題了,值是一直沒有記錄,做了忘忘了做,效率比較低。剛好昨天看到同學的部落格,把他做的題都記錄下來了(甚至還畫圖了),我也做一下吧。

先放題:

示例 1:

輸入: 「babad」

輸出: 「bab」

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

示例 2:

輸入: 「cbbd」

輸出: 「bb」

這是看了提示之後寫的中心擴散法

/**

* 中心擴散法

* @param s

* @return

*/public

static string longestpalindrome1

(string s)

int left,right,len=

1,start=

0,maxlen=1;

for(

int i =

0; i < s.

length()

; i++

)while

(rightlength()

&&s.

charat

(right)

==s.

charat

(i))

while

(left>=

0&&rightlength()

&&s.

charat

(left)

==s.

charat

(right)

) start=len>maxlen?left+

1:start;

maxlen=math.

max(maxlen,len)

; len=1;

}return s.

substring

(start,start+maxlen)

;}

其實這題一開始想到的就是動態規劃,但是可能是邊界處理有點問題,一直沒法通過。

假設字元陣列為chs

動態規劃關鍵是找到初始狀態和狀態轉移方程。

初始狀態:i=j 時,此時dp[i][j]=true

狀態轉移方程:dp[i][j]=true且chs[i-1]==chs[j+1]則dp[i-1][j+1]==true

/**

* 動態規劃

* @param s

* @return

*/public

static string longestpalindrome2

(string s)

int len=s.

length()

;boolean

dp=

newboolean

[len]

[len]

;int start=0;

int maxlen=1;

for(

int j =

1; j < len; j++)}

}}return s.

substring

(start,start+maxlen)

;}

leetcode練習 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例一 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案 示例二 輸入 cbbd 輸出 bb 通過substring劃分子串,遍歷所有可能結果。結果效率太低 如圖 class solution ret...

LeetCode5 最長回文串

include include include include include include using namespace std ifndef solution h define solution h 思路 從回文串的對稱點開始,依次向左向右比較,不相同的時候停止遍歷,直到找出最大的長度的回文...

LeetCode 最長回文子串 5

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 方法一 暴力法 時間複雜度為o n 3 會超時 思路 最笨的方法,遍歷所有子串s,並判斷s的反轉s 與...