#Leetcode# 5. Longest Palindromic Substring
阿新 • • 發佈:2018-11-19
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); } };