string longestPalindrome(string s) {
int L = s.size();
int result = 0;
string s_res = s.substr(0,1);
int m, n;
if(L == 0 )
{
return "";
}
for (int i = 0; i < L-1; i++)
{
//123321
if (s[i] == s[i + 1])
{
m = i; n = i + 1;
while (m >= 0 && n<L&&s[m] == s[n])
{
m--; n++;
}
if (result < (n - m - 1))
{
result = n - m - 1;
s_res = s.substr(i + 1 - result / 2,result);
}
}
//12321
if (i>0&&s[i - 1] == s[i + 1])
{
m = i - 1; n = i + 1;
while (m >= 0 && n<L&&s[m] == s[n])
{
m--; n++;
}
if (result < (n - m - 1))
{
result = n-m - 1;
s_res = s.substr(i - (result - 1) / 2, result);
}
}
}
return s_res;
int L = s.size();
int result = 0;
string s_res = s.substr(0,1);
int m, n;
if(L == 0 )
{
return "";
}
for (int i = 0; i < L-1; i++)
{
//123321
if (s[i] == s[i + 1])
{
m = i; n = i + 1;
while (m >= 0 && n<L&&s[m] == s[n])
{
m--; n++;
}
if (result < (n - m - 1))
{
result = n - m - 1;
s_res = s.substr(i + 1 - result / 2,result);
}
}
//12321
if (i>0&&s[i - 1] == s[i + 1])
{
m = i - 1; n = i + 1;
while (m >= 0 && n<L&&s[m] == s[n])
{
m--; n++;
}
if (result < (n - m - 1))
{
result = n-m - 1;
s_res = s.substr(i - (result - 1) / 2, result);
}
}
}
return s_res;
}
思路:先遍历找到中间那一个或者两个点,然后向两边扩散,直至找到最长的回文。至于扩散的代码,可以写迭代,也可以用递归,个人觉得迭代也很清晰,所以放弃使用递归。