难度中等2242收藏分享切换为英文关注反馈
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
动态规划
class Solution {
public:
string longestPalindrome(string s){
int i,j,l,n=s.size();
vector<vector<int> > dp(n,vector<int>(n));//构造一个含n个0的vector<int>对象
//dp[i][j]表示从i到j的子串是否是回文串
string ans="";
for(i=0;i<n;i++)dp[i][i]=1;
for(l=1;l<n;l++){//字串的跨度
for(i=0;i<n-l;i++){
j=i+l;
if(l==1)dp[i][j]=(s[i]==s[j]);
else dp[i][j]=(s[i]==s[j])&&dp[i+1][j-1];
if(dp[i][j]&&l+1>ans.size())ans=s.substr(i,l+1);//从指定位置i开始,复制l+1长度的字符串
}
}
if(ans.size()<1)return s.substr(0,1);
return ans;
}
};