4、如果一个字符串正着读和反着读都一样,那它就是回文串。请写一个函数,参数为一个字符串,返回这个字符串所有子串里面构成回文串的最大子串。
时间: 2024-12-13 16:26:36 浏览: 9
py代码-输入一个字符串,检查该字符串是否为回文(正着读和反着读都一样的字符串), 如果是就输出Yes,否则输出No。要求使用切片实现。
在Python中,可以使用动态规划来解决这个问题。我们可以创建一个二维布尔矩阵,其中 `dp[i][j]` 表示字符串从下标 `i` 到 `j` 的子串是否是回文。函数的主要思路是从短到长,逐步构建更大的子串。
以下是实现这个功能的代码:
```python
def longest_palindromic_substring(s):
n = len(s)
dp = [[False] * n for _ in range(n)]
max_length = 1
start = 0
# 单字符都是回文串
for i in range(n):
dp[i][i] = True
# 遍历字符串寻找长度大于1的回文串
for length in range(2, n + 1):
for i in range(n - length + 1):
j = i + length - 1
# 如果左右两端的字符相等并且两边的子串都是回文,那么当前子串也是回文
if s[i] == s[j] and (length == 2 or dp[i+1][j-1]):
dp[i][j] = True
if length > max_length:
max_length = length
start = i
return s[start:start + max_length]
# 示例
print(longest_palindromic_substring("babad")) # 输出:"bab"
print(longest_palindromic_substring("cbbd")) # 输出:"bb"
```
这个函数的时间复杂度是O(n^2),因为我们对每个子串都进行了判断。空间复杂度也是O(n^2),因为需要存储一个n x n的二维数组。
阅读全文