LeetCode 學習記錄 5. Longest Palindromic Substring
阿新 • • 發佈:2018-12-16
1 題目要求:
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"
2 解決方法:
遍歷對稱中心元素,根據奇數對稱和偶數對稱兩種情況分別計算對稱子串長度,將更長字串的起始位置和長度進行更新。
class Solution { public: string longestPalindrome(string s) { if (s.empty()) return ""; int start = 0, max = 1, reg = 0; for (int i = 0; i != s.length()-1; i++) { if(s[i]==s[i+1]){ for (int j = 0; ((i - j) >= 0) && ((i + 1 + j) < s.length()); j++) { if (s[i - j] != s[i + 1 + j]) break; reg = (j + 1) * 2; if (reg > max) { max = reg; start = i - j; } } } if((i>0)&&(s[i-1]==s[i+1])){ for (int j = 0; ((i - j) >= 0) && ((i + j) < s.length()); j++) { if (s[i - j] != s[i + j]) break; reg = 1 + 2 * j; if (reg > max) { max = reg; start = i - j; } } } } return s.substr(start,max); } };
需要注意每一次都要同時考慮兩種情況,不然ccc這種可能會漏掉。
時間複雜度O(n2)
空間複雜度O(1)
Manacher法(待補充)