標籤:
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
最長迴文,對於每一個字元從中間向兩邊找,注意分奇數與偶數兩種情況。總的時間複雜度為O(n^2)。另外Manacher演算法複雜度為O(n),Manacher演算法好複雜的樣子,智商捉急,得好好消化一下。先貼個簡單的吧。
1 class Solution { 2 public: 3 int getLPS(const string &s, int idx1, int idx2) { 4 while (idx1 >= 0 && idx2 < s.length() && s[idx1] == s[idx2]) { 5 --idx1; 6 ++idx2; 7 } 8 return idx2 - idx1 - 1; 9 }10 11 string longestPalindrome(string s) {12 if (s.length() < 2) return s;13 int lps = -1, lps1, lps2, pos;14 for (int i = 0; i < s.length(); ++i) {15 lps1 = getLPS(s, i, i);16 lps2 = getLPS(s, i, i + 1);17 if (lps1 > lps || lps2 > lps) {18 pos = i;19 lps = max(lps1, lps2);20 }21 }22 if (lps & 0x1) return s.substr(pos-(lps-1)/2, lps);23 else return s.substr(pos-(lps-2)/2, lps);24 }25 };
[Leetcode] Longest Palindromic Substring