题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
分析
经典动态规划问题,记住找一个字符串中回文串的模版方法即可。
class Solution {
public:
string longestPalindrome(string s) {
if (s.empty()){
return s;
}
int res_l = 0, res_i;
int len = s.size();
bool dp[len][len];
//l表示长度,既是从长度为1的子串开始
for (int l = 1; l <= len; l++){
//i表示起始位置
for (int i = 0; i <= len - l; i++){
int j = i + l - 1;
//灵魂状态转移方程
dp[i][j] = (s[i] == s[j] && ( l <= 2 || dp[i + 1][j - 1]));
//记录起始位置和长度
if (dp[i][j] && l > res_l){
res_l = l;
res_i = i;
}
}
}
return s.substr(res_i, res_l);
}
};
网友评论