编写一个程序,如果一个字符串正读和反着读都是一样的,就是回文串,请编写一个函数,参 数为字符串,返回这个字符串所有子串里面构成回文串的最大子串。abcbc
时间: 2024-05-02 13:23:38 浏览: 78
的最长回文子串为cbc。
请看以下代码,实现了该功能:
```python
def longest_palindrome(s):
"""
找出输入字符串的最长回文子串
"""
if not s:
return ""
def expand(i, j):
"""
以 i 和 j 为中心扩展寻找回文串
"""
while i >= 0 and j < len(s) and s[i] == s[j]:
i -= 1
j += 1
return s[i+1:j]
res = ""
for i in range(len(s)):
palindrome = expand(i, i)
if len(palindrome) > len(res):
res = palindrome
palindrome = expand(i, i+1)
if len(palindrome) > len(res):
res = palindrome
return res
```
输入字符串 "abcbc",调用 `longest_palindrome("abcbc")`,会返回 "cbc",即最长回文子串。
解释一下代码:
首先判断输入是否为空,如果为空,返回空字符串。
`expand` 函数以 `i` 和 `j` 为中心,向左右两个方向扩展,寻找回文串。如果当前字符串是回文串,继续向左右扩展,直到不是回文串为止,返回寻找到的最长回文串。
接下来,从字符串的第一个字符开始,以当前字符为中心寻找回文串,然后以相邻的两个字符为中心寻找回文串。如果发现一个更长的回文串,就更新最终结果,最后返回最长回文串即可。
希望这个代码能满足你的需求!
阅读全文