文章目录
- @[toc]
- 题目描述
- 样例输入输出与解释
- 样例1
- 样例2
- 提示
- Python实现
- 动态规划
文章目录
- @[toc]
- 题目描述
- 样例输入输出与解释
- 样例1
- 样例2
- 提示
- Python实现
- 动态规划
个人主页:丷从心·
系列专栏:LeetCode
刷题指南:LeetCode刷题指南
题目描述
- 给一个字符串
s
,找到s
中最长的回文子串
样例输入输出与解释
样例1
- 输入:
s = "babad"
- 输出:
"bab"
- 解释:
"aba"
同样是符合题意的答案
样例2
- 输入:
s = "cbbd"
- 输出:
"bb"
提示
1 <= s.length <= 1000
s
仅由数字和英文字母组成
Python实现
动态规划
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
if n < 2:
return s
max_len = 1
begin = 0
dp = [[False] * n for _ in range(n)]
for i in range(n):
dp[i][i] = True
for l in range(2, n + 1):
for i in range(n - l + 1):
j = l + i - 1
if s[i] != s[j]:
dp[i][j] = False
else:
if j - i < 3:
dp[i][j] = True
else:
dp[i][j] = dp[i + 1][j - 1]
if dp[i][j] and j - i + 1 > max_len:
max_len = j - i + 1
begin = i
return s[begin:begin + max_len]