题目链接: https://leetcode.com/problems/longest-palindromic-substring/
题意:求一个串的最大回文字串
class Solution {
public:
string longestPalindrome(string s) {
int *p=new int[2005];
int id;
string temp="*";
for(int i=0;i<s.length();i++)
{
temp=temp+s[i];
temp=temp+"#";
}
// cout<<temp<<endl;
memset(p,0,sizeof(p));
id=0;
for(int i=1;i<temp.length();i++)
{
if(p[id]+id>i) p[i]=min(p[id-(i-id)],p[id]-(i-id));
else p[i]=1;
while(temp[i+p[i]]==temp[i-p[i]]) p[i]++;
if(p[i]+i>p[id]+id) id=i;
}
int ma=0;
for(int i=1;i<temp.length();i++)
if(p[ma]<p[i]) ma=i;
if(p[ma]==1)
{
string ans="";
ans=ans+s[0];
return ans;
}
string ans="";
for(int le=ma-p[ma]+1;le<=ma+p[ma]-1;le++)
if(temp[le]!='#'&&temp[le]!='*') ans=ans+temp[le];
delete []p;
return ans;
}
};