给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
C++程序代码
class Solution {
public:
string longestPalindrome(string s) {
string ss1, ss2="a", ss3="a";
for(int i=0; i<s.size()-1; i++)
{
if(s[i]==s[i+1]) // 说明回文是偶数个
{
int j = i+1;
ss1 = equal1(s, i, j);
if(ss1.size() > ss2.size())
{
ss2 = ss1;
}
}else{ // 回文是奇数个
int j = i;
ss1 = equal2(s, i, j);
if(ss1.size() >= ss3.size())
{
ss3 = ss1;
}
}
}
if(ss2.size() >= ss3.size())
{
return ss2;
}else{
return ss3;
}
}
string equal1(string s, int i, int j) // 回文是偶数个
{
string rs;
if(s[i]==s[j] && i>=0 && j<s.size())
{
rs = s.substr(i, j-i+1);
i--;
j++;
if(s[i]==s[j] && i>=0 && j<s.size())
rs = equal1(s, i, j); // 递归
}
return rs;
}
string equal2(string s, int i, int j) // 回文是奇数个
{
string rs;
i--;
j++;
if(s[i]==s[j] && i>=0 && j<s.size())
{
rs = s.substr(i, j-i+1);
if(s[i-1]==s[j+1] && i-1>=0 && j+1<s.size())
rs = equal2(s, i, j); // 递归
}
return rs;
}
};