📅  最后修改于: 2023-12-03 15:12:46.419000             🧑  作者: Mango
这道题目是一道计算机科学中的算法问题。给定一个字符串,要求找出其中的最长回文子串(palindromic substring),即正读和反读都相同的子串,返回该子串。
一种比较常见的解法是使用动态规划。设 $P(i,j)$ 为字符串从 $i$ 到 $j$ 的子串是否为回文串,如果是,返回 true,否则返回 false。则有以下三种情况:
具体实现时可以使用一个二维数组来存储 $P$ 值,然后在计算 $P$ 值时,按照上述三种情况逐步计算即可。
以下是使用 Python 实现的示例代码:
def longest_palindrome_substring(s: str) -> str:
n = len(s)
P = [[False] * n for _ in range(n)]
max_len = 0
start = 0
for i in range(n):
P[i][i] = True
if i < n - 1 and s[i] == s[i+1]:
P[i][i+1] = True
max_len = 2
start = i
for k in range(3, n+1):
for i in range(n-k+1):
j = i + k - 1
if P[i+1][j-1] and s[i] == s[j]:
P[i][j] = True
max_len = k
start = i
return s[start:start+max_len]
这个函数接受一个字符串作为参数,返回该字符串中的最长回文子串。时间复杂度为 $O(n^2)$,空间复杂度为 $O(n^2)$。使用时可以按照以下方式调用:
s = "babad"
print(longest_palindrome_substring(s)) # 输出 "bab"