題目
給定乙個字串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==
snb
(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,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...