给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
动态规划解法:
对每一个字符都从左右判断其是不是回文,若不是跳出循环,最后比较一下,将最大回文赋给maxstr。
时间复杂度O(n2);
由于每次循环开始都定义了两个string类型变量,因此
空间复杂度为O(n2);
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
string tmp, maxstr;
for (int i = 0; i < len; i++) {
string tmp1, tmp2;
for (int u = 0; i - u >= 0 && i + u < len; u++) {
if (s[i - u] == s[i + u])
tmp1 = s.substr(i - u, 2 * u + 1);
else break;
}
for (int u = 0; i - u >= 0 && i + u + 1 < len; u++) {
if (s[i - u] == s[i + 1 + u])
tmp2 = s.substr(i - u, 2 * u + 2);
else break;
}
tmp = tmp1.size() > tmp2.size() ? tmp1 : tmp2;
if (tmp.size() > maxstr.size()) maxstr = tmp;
}
return maxstr;
}
};