python算法题之《最长回文子串》
题目要求
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
代码及解析
class Solution:
def longestPalindrome(self, s):
# 用于存放每个字母出现的位置
dic = {}
# 回文判断开始位置
flag = 0
# 当前处于字符串的位置
i = 0
# 返回值
ans =""
while i < len(s):
# 当前字母不在字典中
if s[i] not in dic:
# 用于存放重复字母的下标如s='ababa'则dic={a:[0,2,4],b:[1,3]}
dic[s[i]] = []
# 当前字母在字典中
if s[i] in dic:
# 将当前字母的位置添加到指定字母的列表中
dic[s[i]].append(i)
# 遍历该字母的位置列表
for flag in dic[s[i]]:
# 如果是回文,判断是否更换ans,然后跳出循环,直到找到回文字符串,最后一个肯定是,因为flag=i
if s[flag:i+1] == s[flag:i+1][::-1]:
# 如果长度大于上一个ans,ans=当前回文字符串
if len(ans) < len(s[flag:i+1]):
ans = s[flag:i+1]
break
# 字符串下标位置加一
i += 1
# 返回最长回文字符串
return ans
结果
image.png
网友评论