题意:求一个字符串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; } };