最長回文子串

2021-09-05 11:02:52 字數 1910 閱讀 2563

題目

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。

示例 1:

輸入: "babad"

輸出: "bab"

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

分析

​ 可以用動態規劃來做,複雜度為o(n

2)

o(n^2)

o(n2

),複雜度太高,以後改進!

通過分析我們可以知道,長度為1的子字串,是回文,長度為2的子字串,如果兩個字元相等

是回文串,長度大於2的子字串,滿足下面的遞推公式

b (m

,n)=

b(m+

1,n−

1)sm

==sn

b(m,

n)=f

alse

sm≠s

nb(m,n)=b(m+1,n-1) \ \ \ \ \ \ \ \ \ s_m==s_n \\ b(m,n)= false \ \ \ \ \ \ \ \ \ s_m \neq s_n

b(m,n)

=b(m

+1,n

−1)s

m​==

sn​b

(m,n

)=fa

lses

m​̸​

=sn​

b(m,n)代表sm,

sm+1

,...

sn

s_m, s_, ...s_n

sm​,sm

+1​,

...s

n​是否是回文串

python**

class

solution

:def

longestpalindrome

(self, s)

:"""

:type s: str

:rtype: str

"""if s =="":

return

"" n =

len(s)

dp =[[

0for i in

range(0

, n+1)

]for i in

range(0

, n+1)

]for i in

range(1

, n+1)

: dp[i]

[i]=

1for x in

range(1

, n)

:for i in

range(1

, n-x+1)

: j = i + x

if j-i ==1:

if s[i-1]

== s[j-1]

: dp[i]

[j]=

1else

:if s[i-1]

== s[j-1]

: dp[i]

[j]= dp[i+1]

[j-1

]else

: dp[i]

[j]=

0for x in

range(0

, n)[:

:-1]

:for i in

range(1

, n-x+1)

: j = i + x

if dp[i]

[j]==1:

return s[i-

1:j]

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

最長回文子串

描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000,且單獨佔一行 如果...

最長回文子串

輸入乙個字元,求出其中最長的回文子串。子串的含義是 在元串中連續出現的字串片段。回文的含義是 正看和倒看相同,如abba和yyxyy,在判斷時候應該忽略所有的空格和標點符號,且忽略大小寫,但輸出應該保持原樣,輸入的字元長度不超過5000,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...