//最长回文,可以将字符串从中间拆开,按左右两部分,一个向左移一个向右移进行对称匹配,每次移动都以移动到的点为哨兵位置,进行对称匹配
class Solution {
public:
string longestPalindrome(string s) {
int solder = s.length() / 2;
string longest_str = "";
longest_str += s[0];
string sub_str = s;
for (; solder > 0;)
{
string temp = "";
int i;
if (sub_str.length() % 2 != 0)
temp = sub_str[solder];
for (i = solder - 1; i >= 0; i--)
if (sub_str[i] == sub_str[sub_str.length() - 1 - i])
temp = sub_str[i] + temp + sub_str[sub_str.length() - 1 - i];
else
break;
sub_str = sub_str.substr(0, sub_str.length() - 1);
solder = sub_str.length() / 2;
longest_str = temp.length() > longest_str.length() ? temp : longest_str;
if (longest_str.length() >= s.length() - 1)
return longest_str;
}
sub_str = s.substr(1, s.length() - 1);
solder = sub_str.length() / 2;
for(;solder > 0;)
{
string temp = "";
if (sub_str.length() % 2 != 0)
temp = sub_str[solder];
for (int i = solder - 1; i >= 0; i--)
if (sub_str[i] == sub_str[sub_str.length() - 1 - i])
temp = sub_str[i] + temp + sub_str[sub_str.length() - 1 - i];
else
break;
sub_str = sub_str.substr(1, sub_str.length() - 1);
solder = sub_str.length() / 2;
longest_str = temp.length() > longest_str.length() ? temp : longest_str;
}
return longest_str;
}
};