Leetcode-5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案.
示例 2:
输入: "cbbd"
输出: "bb"
思路:
中心扩展法,每个字符都可能作为回文串的中心,因此可以对每个字符进行扩展,进行奇数个扩展或者是偶数个扩展。并以此判断最大长度。
C++ code:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
if(n == 0 || n == 1){
return s;
}
string res = "";
//n表示对每个字符都进行一个判断
for(int i = 0; i < n; i++){
//若字符串是奇数个长度
for(int j = 0; (i - j) >= 0 && (i + j) < n; j++){
if(s[i - j] != s[i + j]){
break;
}else if(j * 2 + 1 > res.size()){
res = s.substr(i - j, j * 2 + 1);
}
}
//若字符串是偶数个长度
for(int j = 0; (i - j) >= 0 && (i + j + 1) < n; j++){
if(s[i - j] != s[i + j + 1]){
break;
}else if(j * 2 + 2 > res.size()){
res = s.substr(i - j, j * 2 + 2);
}
}
}
return res;
}
};