题目
- 给一个字符串,返回其中的最长回文子串
思路
- 暴力枚举 i 到 j 的区间,时间复杂度高
- 题目虽然归类到了 dp,但实际上,枚举中心位置,向两周扩散判断回文的时间和空间复杂度更高
代码
class Solution {
public:
string ret;
int len;
void extend(string& s, int left, int right) {
while (left >= 0 && right < s.size() &&
s[left] == s[right]) {
if (right - left + 1 > len) {
len = right - left + 1;
ret = "";
for (int i = left; i <= right; i++) {
ret += s[i];
}
}
left--;
right++;
}
}
string longestPalindrome(string s) {
len = 1;
ret = s[0];
for (int i = 0; i < s.size()-1; i++) {
extend(s, i, i);
extend(s, i, i+1);
}
return ret;
}
};