一、题目描述
给你一个字符串 s s s,找到 s s s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成。
二、解题过程
1、第一次尝试
1.1 代码如下
尝试采用动态规划的方法。动态规划的核心思想是构建一个二维数组 dp
,其中 dp[i][j]
表示子串 s[i:j+1]
是否为回文串。通过填充这个二维数组,我们可以找到最长的回文子串。
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
n = len(s)
# 如果字符串长度小于 2,则整个字符串本身就是最长回文子串(或空字符串)
if n < 2:
return s
dp = [[False] * n for _ in range(n)] # dp 是一个二维数组,dp[i][j] 表示 s[i:j+1] 是否是回文子串
start, end = 0, 0 # start 和 end 分别记录最长回文子串的起始和结束索引
# 初始化 dp 数组,单个字符肯定是回文子串。
for i in range(n):