Leetcode5:最长回文子串——中心扩展法
这篇文章发布已经超过两年,部分工具、版本或观点可能已经变化,请结合最新信息判断。
题目
https://leetcode-cn.com/problems/longest-palindromic-substring/
题解
中心扩展法,看到这个名字我就知道该怎么做了,然后做了二十分钟…debug总是出问题…
这道题需要注意的细节:
- 回文子串长度既可以是奇数也可以是偶数,如果是奇数,那么它有一个中心,如果是偶数,则是两个中心。
那么代码思路就是先枚举中心,然后由中心向外扩展,直到不能扩展为止,记录下最大的扩展长度。
优雅的官方题解代码如下:
class Solution:
def expand(self, s, left, right):
while left >=0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return left+1, right-1
def longestPalindrome(self, s: str) -> str:
start, end = 0, 0
for i in range(len(s)):
left1, right1 = self.expand(s, i ,i)
left2, right2 = self.expand(s, i, i+1)
if right1-left1 > end - start:
start, end = left1, right1
if right2-left2 > end - start:
start, end = left2, right2
return s[start: end+1]
太优雅了,我感觉这代码水平领先我至少刷一年题。
评论区已延迟加载滑到评论区附近时会自动加载,也可以现在手动打开。



