1. 程式人生 > >#Leetcode# 5. Longest Palindromic Substring

#Leetcode# 5. Longest Palindromic Substring

https://leetcode.com/problems/longest-palindromic-substring/

 

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"

題解:$Manacher‘s Algorithm$ 馬拉車演算法 用 $O(n)$ 的時間複雜度來判斷最長迴文子串的長度

      詳解:https://www.cnblogs.com/grandyang/p/4475985.html

程式碼:

class Solution {
public:
    string longestPalindrome(string s) {
        string t = "$#";
        for(int i = 0; i < s.length(); i ++) {
            t += s[i];
            t += "#";
        }
        vector<int> p(t.size(), 0);
        int mx = 0, id = 0, resLen = 0, resCenter = 0;
        for(int i = 0; i < t.size(); i ++) {
            p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;
            while (t[i + p[i]] == t[i - p[i]]) ++p[i];
            if (mx < i + p[i]) {
                mx = i + p[i];
                id = i;
            }
            if (resLen < p[i]) {
                resLen = p[i];
                resCenter = i;
            }
        }
        return s.substr((resCenter - resLen) / 2, resLen - 1);
    }
};