[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%的用户

 

 

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