我觉得能想到这个算法的人真是牛!!
详情参照这里
http://blog.csdn.net/hopeztm/article/details/7932245
class Solution {
public:
string longestPalindrome(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(s.length()<=1) return s;
string str="~";
for(int i=0;i<s.length();i++)
{
str+="*"+s.substr(i, 1);
}
str+="*@";
vector<int> p(str.length());
int C=0,R=0;
for(int i=1;i<str.length();i++)
{
int mirror_i=2*C-i;
p[i]=(R>i)?min(p[mirror_i],R-i):0;
while(str[i-1-p[i]]==str[i+1+p[i]])
p[i]++;
if(i+p[i]>R)
{
R=i+p[i];
C=i;
}
}
int maxl=0,maxi=0;
for(int i=1;i<p.size();i++)
{
if(p[i]>maxl)
{
maxl=p[i];
maxi=i;
}
}
return s.substr((maxi - 1 - maxl)/2, maxl);
}
};