← 题库
中等双指针字符串动态规划

PROBLEM / 研究生阶段

5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入: s = "babad" 输出: "bab" 解释: "aba" 同样是符合题意的答案。

示例 2:

输入: s = "cbbd" 输出: "bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

参考解法

下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。

python

class Solution(object):
    def longestPalindrome(self, s):
        if len(s) < 2:
            return s
        start = 0
        max_len = 1

        def expand(left, right):
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
            return right - left - 1

        for i in range(len(s)):
            len1 = expand(i, i)  # 奇数回文
            len2 = expand(i, i + 1)  # 偶数回文
            current_max = max(len1, len2)
            if current_max > max_len:
                max_len = current_max
                # 计算初始索引
                start = i - (current_max - 1) // 2

        return s[start:start + max_len]
        """
        :type s: str
        :rtype: str
        """
这道题暂未附参考解法,编辑器草稿仍会自动保存在本机。
YOUR SOLUTION5. 最长回文子串