给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
动态规划,dp[i][j]=true表示s[i]-s[j]是回文子串,i<j
当s[i]=s[j]时,如果j-i<2,s[i]-s[j]一定是,如果dp[i+1][j-1]=true,s[i]-s[j]也一定是
class Solution {
public:
string longestPalindrome(string s) {
int len = s.length();
int maxi=0,maxl=0;
vector<vector<int> > dp(len, vector<int>(len));
for(int j=0; j<len; j++)
{
dp[j][j] = 1;
if(maxl < 1)
{
maxl = 1;
maxi = j;
}
for(int i=0; i<j; i++)
{
if( s[i]==s[j] && ((j-i)<2 || (j>0 && dp[i+1][j-1])) )
dp[i][j] = 1;
if(dp[i][j])
{
if((j-i+1) > maxl)
{
maxl = j-i+1;
maxi = i;
}
}
}
}
string ans = s.substr(maxi, maxl);
return ans;
}
};