Given a string S, find the longest palindromic substringin S. You mayassume that the maximum length of S is 1000, and there exists one uniquelongest palindromic substring.
classSolution {
public:
string longestPalindrome(string s) {
string temp ;
int p[2000];
memset(p,0,sizeof(p));
int maxlen =0;
int mx = 0;
int id = 0;
//构造新串,格式为"#.#.#....#.#"
int len = s.length();
if (len == 0){
return s;
}
for (int i=0; i<len; ++i){
temp +="#";
temp +=s[i];
}
temp +="#";
len = temp.length();
for ( int i=1; i<len; ++i ){
p[i] = mx>i ?min(p[2*id-i],mx-i):0;
while ( i-p[i]-1>=0 &&i+p[i]+1<len && temp[i+p[i]+1]==temp[i-p[i]-1] ){
p[i]++;
}
if (i+p[i]>mx) {
mx = i+p[i];
id = i;
}
}
for (int i=0 ;i<=mx; ++i){
if ( maxlen < p[i] ){
id = i;
maxlen = p[i];
}
}
returns.substr((id-1)/2-(p[id]-1)/2,p[id]);
}
};