leetcode题解-5.最长回文子串

最长回文子串:link

1.题目分析

1.最容易想到的是从每个位置向两边扩展得到最长回文子串。

2.示例代码

class Solution {
private:
    int start, len = 0;
    
    void extend_palindrome(const string& s, int i, int j){
        while(i >= 0 && j < s.size() && s[i] == s[j]){
            i--; j++;
        }
        if(len < j - i - 1){
            start = i + 1;
            len = j - i - 1;
        }
    }
public:
    string longestPalindrome(string s) {
        if(s.size() < 2)
            return s;
        for(int i = 0; i < s.size() - 1; ++i){
            extend_palindrome(s, i, i);
            extend_palindrome(s, i, i + 1);
        }
        return s.substr(start, len);
    }
};

3.另外的解法

1.最优的解法应该是mannacher算法
2.dp解法O(n2)的时间复杂度,dp先求解的顺序有点讲究。

你可能感兴趣的:(题解,leetcode)