LeetCode (5)最長回文子串

2021-10-21 20:48:43 字數 1472 閱讀 3589

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

示例1:

輸入:s = "babad"

輸出:"bab"

解釋:"aba" 同樣是符合題意的答案。

示例2:

輸入:s = "cbbd"

輸出:"bb"

示例3:

輸入:s = "a"

輸出:"a"

示例4:

輸入:s = "ac"

輸出:"a"

對於乙個子串而言,如果它是回文串,並且長度大於 2,那麼將它首尾的兩個字母去除之後,它仍然是個回文串。可以採用動態規劃的方法,設p(i

,j)p(i,j)

p(i,j)

表示字串s

ss的第i

ii到j

jj個字母組成的串(下文表示成s[i

:j]s[i:j]

s[i:j]

是否為回文串):

p (i

,j)=

true \quad\quad 如果子串s_ \ldots s_是回文串\\ false \quad其他情況 \end

p(i,j)

==s_

si​=sj

​時,s[i

,j]s[i,j]

s[i,j]

才是回文串。

p (i

,j)=

p(i+

1,j−

1)an

d(si

==sj

)p(i,j)=p(i+1,j-1) \quad and \quad (s_==s_)

p(i,j)

=p(i

+1,j

−1)a

nd(s

i​==

sj​)

除此之外,還有長度為小於等於2的情況,對於長度為1的子串,它顯然是個回文串;對於長度為2的子串,只要兩個字母相同,它也是乙個回文串。由此得到動態規劃邊界條件:

p(i,i)=true \quad\quad \\ p(i,i+1)=(s_=s_) \quad \end

else

if(l ==1)

else

if(dp[i]

[j]&& l +

1> ans.

size()

)}}return ans;}}

;int

main

(int argc,

char

*ar**)

執行結果:

LeetCode5最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...

LeetCode 5 最長回文子串

問題描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解決方案 中心擴充套件演算法 事實上,只需使用恆定的空間,我們就可以在 o n 2 的時間內解決這個問題...

leetcode5 最長回文子串

遞推式 1 一般 s i 1 s j 1 and j i and j i len s i 1,j 1 2 初始化dp矩陣對角線的值為 true,相鄰兩個元素相等時dp i i 1 為true 初始化回文串起始位置和長度。def longestpalindrome s n len s if s ret...