给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000,写出代码
时间: 2024-02-23 11:00:32 浏览: 142
好的,这是一个经典的字符串问题。我可以使用中心扩展算法来解决它。具体思路如下:
1. 从左往右遍历字符串,以每个字符为中心点向两边扩展,分别求出奇数长度和偶数长度的回文子串。
2. 比较每个中心点扩展得到的回文子串长度,取最长的即可。
下面是代码实现:
```python
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s) < 2:
return s
def expand(left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left + 1:right]
res = ""
for i in range(len(s)):
# 奇数长度的回文子串
s1 = expand(i, i)
if len(s1) > len(res):
res = s1
# 偶数长度的回文子串
s2 = expand(i, i + 1)
if len(s2) > len(res):
res = s2
return res
```
这个算法的时间复杂度为 O(n^2),空间复杂度为 O(1)。
阅读全文