最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
最长回文子串可以使用动态规划来解,dp状态转移方程为:
dp[i][i]=1;
dp[i][i+1]=1 if s[i]==s[i+1];
dp[i][j]=1 if dp[i+1][j-1]==1 && s[i]==s[j];
代码:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
if(n<2) return s;
int** dp = new int*[n];
int start=0,stop=0;
for(int i=0;i<n;++i){
dp[i] = new int[n];
dp[i][i]=1;
}
for(int i=0;i<n-1;i++){
if(s[i]==s[i+1]) {
dp[i][i+1]=1;
start=i;
stop=i+1;
}
}
for(int l=3;l<=n;l++){
for(int i=0;i<n-l+1;i++){
if(s[i]==s[i+l-1]&&dp[i+1][i+l-2]==1){
dp[i][i+l-1]=1;
start=i;
stop=i+l-1;
}
}
}
return s.substr(start,stop-start+1);
}
};