LeetCode5(medium)-最长回文子串
题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
思路
中心扩展法
遍历字符串,依次把每个字符作为中心。
- 中心为一个字符:中心一定是回文子串,如果左字符和右字符相同,那么扩展后的子串依然是回文子串。如果左字符和右字符不同,则扩展结束,记录当前回文子串位置。
- 中心为两个字符:如果两字符相同,则中心是回文子串,进行后续扩展;如果两字符不同,则中心不是回文子串,不用进行后续扩展,子串长度为1.
遍历结束,输出最长的回文子串即可。
class Solution:#1180ms 70.74%
def getLength(self,s,left,right):
while left>=0 and right<len(s) and s[left]==s[right]:
left-=1
right+=1
left+=1
right-=1
return left,right
def longestPalindrome(self, s: str) -> str:
start,end=0,0
for center in range(len(s)):
left,right=self.getLength(s,center,center)
if right-left>end-start:
start,end=left,right
left, right = self.getLength(s, center, center+1)
if right - left > end - start:
start, end = left, right
return s[start:end+1]