描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
实现:python3
使用动态规划优化暴力破解,时间复杂度:O(n^2)
空间复杂度:O(n^2)
class Solution:
def longestPalindrome(self, s: str) -> str:
#s = "aabaacd"
length = len(s)
if length==0:
print("The string is empty!")
elif length==1:
print(s)
start = 0 # 子串的启始位置
maxs = 1 # 最大回文串的长度
dp = [[False for _ in range(length)] for _ in range(length)]
# 初始化一个全0矩阵
for i in range(length): # 初始化回文串长度为1和2的状态
dp[i][i] = True
if i<length-1 and s[i]==s[i+1]:
dp[i][i+1] = True
start = i
maxs = 2
for x in range(3, length+1): # 寻找长度>3的回文串长度
for i in range(length+1-x):
j = i+x-1
if s[i]==s[j] and dp[i+1][j-1]==True:
dp[i][j] = True
maxs = x
start = i
#print(maxs)
return s[start:start+maxs]