题:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba”也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
思路:
dp状态转移方程:
if(s[i]==s[j)
dp[i][j]=dp[i+1][j-1];//dp[i][j]表示字符串i到j位置是否是回文
else
dp[i][j]=0;
手撕:
string longestPalindrome(string s) {
if(s.size()==0)
return "";
if(s.size()==1)
return s;
int n=s.size();
vector<vector<int>> dp(n,vector<int>(n));
for(int i=0;i<n;++i)
dp[i][i]=1;
int res=1;
int beg=0;
for(int j=1;j<n;++j){
for(int i=0;i<j;++i){
if(s[i]==s[j]){
if(i+1<=j-1){
dp[i][j]=dp[i+1][j-1];
if(dp[i][j]==1)
if(res<j-i+1){
res=j-i+1;
beg=i;
}
}else{
dp[i][j]=1;
if(res<j-i+1){
res=j-i+1;
beg=i;
}
}
}else
dp[i][j]=0;
}
}
return s.substr(beg,res);
}