背景:
前几天面试百度的时候,被问到了最长回文子串,当时没有很快地写出来,即使暴力解法,也写得磕磕绊绊,所以我想了下,还是通过练习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%的用户