力扣 5. 最长回文子串

70 阅读1分钟

🔗 leetcode.cn/problems/lo…

题目

  • 给一个字符串,返回其中的最长回文子串

思路

  • 暴力枚举 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;
        
    }
};