典型的DP问题:求解字符串中长度最大的回文 子字符串。令bool table[i][j]代表字符串中i,j位置之间是否为回文,那么table[i][j]=1时当且仅当s[i]==s[j]&&table[i+1][j-1]!=0
string longestPalindrome(string s) {
bool table[1000][1000]={0};
int begin=0,len=1;
for(int i=0;i<s.size()-1;i++)
{
table[i][i]=1;
if(s[i]==s[i+1])
{
table[i][i+1]=1;
begin = i;
len = 2;
}
}
table[s.size()-1][s.size()-1]=1; //form the table
for(int num=3;num<=s.size();num++)
{
for(int i=0;i<=s.size()-num;i++)
{
int j=i+num-1;
if(s[i]==s[j]&&table[i+1][j-1])
{
table[i][j]=1;
if(j-i+1 > len)
{
begin = i;
len = j-i+1;
}
}
}
}
return s.substr(begin,len);
}