给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:输入:s = "cbbd"
输出:"bb"
示例 3:输入:s = "a"
输出:"a"
示例 4:输入:s = "ac"
输出:"a"
我用的方法是中心扩散(借助了其他大佬的思路):以当前字符为中心向两边扩散,如果前后字符相等那么继续扩散,知道左右字符不相等或者超过边界。(有两种情况, 一种是以一个字符为中心,还有一种是以两个字符为中心)
def longestPalindrome(self, s: str) -> str:
if len(s) < 2:
return s
new_s = ''
for i in range(len(s)):
s1 = self.find(s, i, i) # 以当前字符为中心的最长回文子串
s2 = self.find(s, i, i+1) # 以当前字符和下一字符为中心的最长回文子串
#如果最大长度有变化则更新res
if max(len(s1), len(s2)) > len(new_s):
new_s = s2 if len(s1) < len(s2) else s1
return new_s
def find(self, s, left, right):
#找到当前中心的最大长度子串
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left+1:right]