LeetCode 第 5 题:最长回文子串
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例
示例 1:
输入:"babad"
输出:"bab"
注意:"aba" 也是一个有效答案。
示例 2:
输入:"cbbd"
输出:"bb"
题目解析
看到该题目,首先想到的是遍历字符串,取出子串,判断其逆置后是否与其相同,即判断是否符合回文。从中寻找最长的一个。这是暴力破解法。
暴力破解法
class Solution:
def longestPalindrome(self, s: str) -> str:
string = ""
length = -1
for i in range(len(s)):
for j in range(i, len(s)):
a = s[i:j+1]
if a == a[::-1] and len(a) > length:
string = a
length = len(a)
return string
其中 a[::-1] 运用了列表的切片,使其逆序排列。执行测试数据时通过了,但在提交的时候出了问题,原因是超时。因为该方法需要两层循环,对于长字符串(如'一千个一')会导致超时。
中心扩展算法
参考题解后,采用中心扩展算法。
class Solution:
def () -> :
s == s[::-]:
s
res = s[:]
i ((s)):
len1 = .expandAroundCenter(s, i, i)
len2 = .expandAroundCenter(s, i, i+)
res = (res, len1, len2, key=)
res
():
left >= right < (s) s[left] == s[right]:
left -=
right +=
s[left+:right]


