题目

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

示例 2:
输入: “cbbd”
输出: “bb”

方案一(中心拓展)

  1. class Solution:
  2. def expandAroundCenter(self, s, left, right):
  3. while left >= 0 and right < len(s) and s[left] == s[right]:
  4. left -= 1
  5. right += 1
  6. return left + 1, right - 1
  7. def longestPalindrome(self, s: str) -> str:
  8. start, end = 0, 0
  9. for i in range(len(s)):
  10. left1, right1 = self.expandAroundCenter(s, i, i)
  11. left2, right2 = self.expandAroundCenter(s, i, i + 1)
  12. if right1 - left1 > end - start:
  13. start, end = left1, right1
  14. if right2 - left2 > end - start:
  15. start, end = left2, right2
  16. return s[start: end + 1]