题意:求一个字符串s的最长回文子串。
思路:dp[i][j]表示s[i,j]是否为回文字符子串(true or false)
则有状态转移方程:dp[i][j]=true,if dp[i+1][j-1]==true&&s[i+1]==s[j-1]
class Solution {
public:
string longestPalindrome(string s) {
int n=s.length();
if(n==1)
return s;
int i,j;
int maxlen,pos;
bool dp[1000][1000];
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(i==j)
dp[i][j]=true;
else
dp[i][j]=false;
for(i=2;i<=n;i++)//控制步长
for(j=0;j<=n-i;j++)
{
if(i==2&&s[j]==s[j+1]||dp[j+1][j+i-2]&&s[j]==s[j+i-1])
{
dp[j][j+i-1]=true;
maxlen=i;
pos=j;
}
}
string ans="";
for(i=pos;i<pos+maxlen;i++)
ans+=s[i];
return ans;
}
};