[leetcode][python] 5. 最長迴文子串

背景:

前幾天面試百度的時候,被問到了最長迴文子串,當時沒有很快地寫出來,即使暴力解法,也寫得磕磕絆絆,所以我想了下,還是通過練習LeetCode複習一下,順便理由提升下Python擼算法的能力。

今天時間比較緊,先寫暴力解法,後續再補充其他解法。

題目:

給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。
示例 2:

輸入: "cbbd"
輸出: "bb"

暴力解法:

def if_is_hw(s, head, tail):
    while(tail > head):
        if s[head] != s[tail]:
            return False
        head += 1
        tail -= 1
    return True

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        len_s = len(s)
        if len_s < 2:
            return s
        longest_son_s_len = 1
        son_head = 0
        for i in range(0, len_s - 1):
            for j in range(i+1, len_s):
                if (j - i + 1) > longest_son_s_len and if_is_hw(s, i, j):
                    longest_son_s_len = j - i + 1
                    son_head = i
        return s[son_head:son_head + longest_son_s_len]

執行結果:

通過

執行用時 :7532 ms, 在所有 Python 提交中擊敗了5.01%的用戶

內存消耗 :12.9 MB, 在所有 Python 提交中擊敗了13.04%的用戶

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章