题目分析:要求计算给定字符串中最长的回文字符串。
给你一个字符串 s,找到 s 中最长的 回文子串.
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000s仅由数字和英文字母组成
主要思路:
- 可以使用动态规划或中心扩展法来解决。
- 动态规划通过构建一个二维矩阵来记录子串是否为回文,并根据状态转移方程进行计算。
- 中心扩展法从字符串的每个位置开始,向两边扩展,判断是否为回文。
时间复杂度:
- 动态规划的时间复杂度为 O(n^2),其中 n 是字符串的长度。
- 中心扩展法的时间复杂度也为 O(n^2)。
空间复杂度:
- 动态规划需要使用一个二维矩阵,空间复杂度为 O(n^2)。
- 中心扩展法使用的额外空间较少,通常为 O(1)。
方法一:动态规划
以下是使用动态规划解决该问题的 Python 代码示例:
def longest_palindrome(s):
# 获取字符串的长度
n = len(s)
# 创建一个二维数组 dp,用于存储子串是否为回文的状态
dp = [[False] * n for _ in range(n)]
# 初始化答案字符串为空
ans = ""
# 初始化边界情况:单个字符本身是回文
for i in range(n):
dp[i][i] = Tru

最低0.47元/天 解锁文章
1万+





