《最长回文子串》

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

你可能感兴趣的:(《最长回文子串》)