一、题目要求:
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
二、思路:
1、我们可以从指定的中心位置向两边不断扩展,直到找到以该中心为轴的最长回文子串。我们定义三个参数:字符串s、左边界left、右边界right。用while循环不断扩展,直到left左边界小于等于0或者right右边界大于等于字符串长度或者左边界的字符不等于右边界的字符为止。循环结束后返回的是起始索引和结束索引。
三、代码:
class Solution:
def expandAroundCenter(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.expandAroundCenter(s, i, i)
left2, right2 = self.expandAroundCenter(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] #左闭右开区间
四、总结:
基本的思路理解了就很容易了,这里注意基本的语法问题。比如说python定义一个方法该如何定义。