题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
要点
dp[i][j] ---- s[i] == s[j] and dp[i + 1][j - 1]
AC代码
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
if (len < 2) return s;
bool *dp = new bool[len * len];
int curLen = 0, maxLen = 0;
int start = 0;
for (int j = 1; j < len; ++j) {
for (int i = j - 1; i >= 0; --i) {
if (s[i] == s[j]) {
if (j - i < 3) {
*(dp + i * len + j) = true;
}
else {
*(dp + i * len + j) = *(dp + (i + 1) * len + j - 1);
}
}
else {
*(dp + i * len + j) = false;
}
if (*(dp + i * len + j)) {
curLen = j - i + 1;
if (curLen > maxLen) {
maxLen = curLen;
start = i;
}
}
}
}
return s.substr(start, maxLen);
}
};
网友评论