[LeetCode] 5. Longest Palindromic S
問題描述
給定一個字串 s,找出其中最長的迴文子字串,假設 s 的最大長度為 1000。
例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是正確的答案
例 2:
Input: "cbbd"
Output: "bb"
問題難度
Medium
解題思路
注意到迴文的對稱性特點,我們只需要在遍歷 s 的過程中,假設每一個字元都是迴文的中心,對於每一個迴文中心,我們不斷向兩邊擴充套件,同時檢測其對稱性,找出該回文的邊界,並記錄其長度,最終,當遍歷完 s 之後,我們便檢測了 s 中所有的迴文,當然就可以得到 s 中最長的迴文子字串。這種方法的時間複雜度為 KaTeX parse error: Expected 'EOF', got '' at position 7: O(n^2)̲ 。
需要注意的是,迴文有兩種形式:單中心和雙中心,所以我們在遍歷每個字元時,不僅要把當前字元當做單中心迴文的中心,還要將當前字元和下一個字元當做雙中心迴文的中心,並分別以這兩個中心向兩邊擴充套件。
全部程式碼如下:
class Solution():
def expand(self, left, right, s):
"""
expand from middle point
"""
if right >= len(s) or s[left] != s[right]:
return 0
while left-1 >= 0 and right+1 < len(s) and s[left-1] == s[right+1]:
left -= 1
right += 1
return right + 1 - left
def longest_palindrome(self, s):
"""
:type s: str
:rtype: str
"""
if not s:
return ""
middle = 0
max_len = 0
for i in range(len(s)):
len1 = self.expand(i, i, s)
len2 = self.expand(i, i+1, s)
longer = max(len1, len2)
if longer > max_len:
max_len = longer
middle = i
begin = middle-int((max_len-1)/2)
return s[begin:begin+max_len]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2508/viewspace-2823033/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LeetCode 5. Longest Palindromic SubstringLeetCode
- Leetcode Longest Palindromic SubstringLeetCode
- LeetCode 5 (Longest Palindromic Substring)LeetCode
- Leetcode-Longest Palindromic SubstringLeetCode
- Longest Palindromic Substring leetcode javaLeetCodeJava
- LeetCode OJ : 5 Longest Palindromic SubstringLeetCode
- LeetCode每日一題:longest palindromic substringLeetCode每日一題
- [LeetCode] Longest Palindromic Substring 最長迴文子串LeetCode
- Leetcode5: Longest Palindromic Substring(最長迴文子串)LeetCode
- Leetcode Longest Common PrefixLeetCode
- [LeetCode]Longest Common PrefixLeetCode
- Leetcode 14 Longest Common PrefixLeetCode
- Leetcode 32 Longest Valid ParenthesesLeetCode
- LeetCode- Longest Absolute File PathLeetCode
- LeetCode-Longest Increasing SubsequenceLeetCode
- Leetcode-Longest Common PrefixLeetCode
- Leetcode-Longest Valid ParenthesesLeetCode
- Leetcode-Longest Consecutive SequenceLeetCode
- leetcode 之 Longest Valid ParenthesesLeetCode
- Longest Valid Parentheses leetcode javaLeetCodeJava
- Longest Consecutive Sequence leetcode javaLeetCodeJava
- Longest Common Prefix leetcode javaLeetCodeJava
- leetcode388. Longest Absolute File PathLeetCode
- [LeetCode] 32. Longest Valid ParenthesesLeetCode
- leetcode32_Longest Valid ParenthesesLeetCode
- LeetCode-Longest Increasing Path in a MatrixLeetCode
- Leetcode 329. Longest Increasing Path in a MatrixLeetCode
- LeetCode 第 14 題(Longest Common Prefix)LeetCode
- LeetCode128:Longest Consecutive SequenceLeetCode
- Leetcode Longest Substring Without Repeating CharactersLeetCode
- Leetcode 3 Longest Substring Without Repeating CharactersLeetCode
- Leetcode 298 Binary Tree Longest Consecutive SequenceLeetCode
- [LeetCode] 674. Longest Continuous Increasing SubsequenceLeetCode
- [LeetCode] 524. Longest Word in Dictionary through DeletingLeetCode
- LeetCode- Binary Tree Longest Consecutive SequenceLeetCode
- LeetCode解題-#14-Longest Common PrefixLeetCode
- Leetcode-Longest Substring Without Repeating CharactersLeetCode
- [LeetCode] Longest Common Prefix 最長共同字首LeetCode