背景:
前幾天面試百度的時候,被問到了最長迴文子串,當時沒有很快地寫出來,即使暴力解法,也寫得磕磕絆絆,所以我想了下,還是通過練習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%的用戶