給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。
示例 1:
輸入: "babad"示例 2:輸出: "bab"
注意: "aba"也是乙個有效答案。
輸入: "cbbd"方法1:暴力法輸出: "bb"
求乙個字串的最長回文子串,我們可以將以每個字元為首的子串都遍歷一遍,判斷是否為回文,如果是回文,再判斷最大長度的回文子串。
複雜度分析
string longestpalindrome(string &s)方法2:動態規劃if(tmp1 >= tmp2 && j - i + 1 >maxlen)}}
return
s.substr(start, maxlen);
}
為了改進暴力法,我們首先觀察如何避免在驗證回文時進行不必要的重複計算。考慮「ababa」 這個示例。如果我們已經知道 「bab」 是回文,那麼很明顯,「ababa」 一定是回文,因為它的左首字母和右尾字母是相同的。
設狀態dp[j][i]表示索引j到索引i的子串是否是回文串。則轉移方程為:
複雜度分析
class方法3:中心擴充套件法solution
const
int n =s.size();
bool
dp[n][n];
memset(dp,
0, sizeof
(dp));
int maxlen = 1
;
int start = 0
;
for(int i = 0; i < n; ++i)
else
if(dp[j][i] && maxlen < (i - j + 1
)) }}
return
s.substr(start, maxlen);}};
中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。
複雜度分析
classsolution
else
break
; }
while (r < s.size())
else
break
; }
while (l >= 0 && r < s.length())
else
break
; }
if (right - left < r - l - 2)
}return s.substr(left, right - left + 1);//
返回最終的子串
}};
最長回文子串 最長回文子串行
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,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...