题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s)==0:
return ""
# '#'作为插入使用Manacher算法
string_list = ['#']
# string_list保存处理后的字符串
for i in range(len(s)):
string_list += [s[i],'#']
len_list = []
# len_list保存以当前点为中心点最大的回文长度
for i in range(len(string_list)):
j=0
while j<=i and j+i < len(string_list) and string_list[i-j]==string_list[i+j]:
j+=1
len_list += [j]
# 计算回文长度
# 查找回文长度最大值所在位置
sorted = []
sorted += len_list
sorted.sort(reverse = True)
max =sorted[0]
index = len_list.index(max)
# 将带返回的最大回文保存至toreturn
toreturn = [string_list[index]]
for i in range(1,max,1):
toreturn.insert(0,string_list[index-i])
toreturn.append(string_list[index+i])
# 去除'#'
for i in range(toreturn.count('#')):
toreturn.remove('#')
# list转string
str = "".join(toreturn)
return str
Manacher算法
具体见该网址
https://blog.csdn.net/dyx404514/article/details/42061017