题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
暴力解法思想:设置两个循环和一个判断是否是回文字符串的函数。首先设置大循环遍历循环,接着设置第二个循环即右边界循环,对以这两个循环变量为左右边界的字符字串进行判断,若是则记录此时字符串开头位置和长度,若不是则继续进行遍历。由于时间耗费过多,此法就不再赘述。
动态规划法:以空间换取时间,具体见下述程序:
class Solution:
def longestPalindrome(self, s: str) -> str:
size = len(s)
if size < 2:
return s
dp = [[False for _ in range(size)] for _ in range(size)]
max_len = 1
start = 0
for i in range(size):
dp[i][i] = True
for j in range(1, size):
for i in range(0, j):
if s[i] == s[j]:
if j - i < 3:
dp[i][j] = True
else:
dp[i][j] = dp[i + 1][j - 1]
else:
dp[i][j] = False
if dp[i][j]:
cur_len = j - i + 1
if cur_len > max_len:
max_len = cur_len
start = i
return s[start:start + max_len]