题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
这道题我采用的是中心扩散的方法,分别判断 aca
, aabbaa
两种模式,因此进行了两次遍历,时间上不太理想只超越了30%,但是空间上超越了99%,也算是有利有弊。
官网题解提到了 Manacher 算法 暂时还没有了解,后面学习一下该方法,改进一下。
题解:
class Solution:
def longestPalindrome(self, s: str) -> str:
result = ''
slen = len(s)
if slen == 0:
return ''
for i in range(slen):
li = i-1
ri = i+1
cur = s[i]
for j in range(min(i, slen-i-1)):
if li < 0 or ri >= slen:
break
if s[ri] == s[li]:
cur = s[li] + cur + s[ri]
li -= 1
ri += 1
else:
break
if len(cur) > len(result):
result = cur
li = i-1
ri = i
cur = ''
for j in range(min(i, slen-i)):
if li < 0 or ri >= slen:
break
if s[ri] == s[li]:
cur = s[li] + cur + s[ri]
li -= 1
ri += 1
else:
break
if len(cur) > len(result):
result = cur
return result