📅  最后修改于: 2023-12-03 14:50:46.060000             🧑  作者: Mango
你需要编写一个程序,找到给定字符串中的最长回文子串。回文是正反都相同的字符串序列。
def longest_palindrome(s):
# 在此处添加你的代码
# 测试输入
input_str = "babad"
# 调用函数并打印结果
print(longest_palindrome(input_str))
要解决这个问题,可以使用动态规划的方法。
首先,定义一个二维数组 dp,dp[i][j] 表示字符串 s 中从索引 i 到 j 的子串是否是回文字符串。
然后,通过填充数组 dp 来找到最长的回文子串。具体算法如下:
最后,通过切片操作返回最长回文子串。
def longest_palindrome(s):
n = len(s)
if n < 2:
return s
dp = [[False] * n for _ in range(n)]
max_length = 1
start = 0
for i in range(n):
dp[i][i] = True
for j in range(1, n):
for i in range(j):
if s[i] == s[j] and (j - i <= 2 or dp[i+1][j-1]):
dp[i][j] = True
if j - i + 1 > max_length:
max_length = j - i + 1
start = i
return s[start:start+max_length]
# 测试输入
input_str = "babad"
# 调用函数并打印结果
print(longest_palindrome(input_str)) # 输出:bab 或 aba
注:上述代码使用了动态规划的方法,时间复杂度为 O(n^2),空间复杂度为 O(n^2)。