LeetCode 热题 HOT 100之最长回文子串
题目5:给你一个字符串 s,找到 s 中最长的回文子串。
方案:中心拓展算法,代码是对算法的实现,看到这个问题后应该尽可能找到最佳的算法,发现回文子串的特点要么是以一个字符为中心拓展,要么是以两个相同字符为中心扩展,考虑这两种情况,将代码实现。
class Solution:
def longestPalindrome(self, s: str) -> str:
left, right = 0, 0
def expand(s, l, r):
while l >= 0 and r < len(s) and s[l] == s[r]:
l -= 1
r += 1
return l + 1, r - 1
for i in range(len(s)):
left1, right1 = expand(s, i, i)
if right - left < right1 - left1:
left, right = left1, right1
left2, right2 = expand(s, i, i + 1)
if right - left < right2 - left2:
left, right = left2, right2
return s[left:right + 1]