美文网首页
《最长回文子串》

《最长回文子串》

作者: 空巷丨 | 来源:发表于2019-05-04 13:55 被阅读0次

    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

    相关文章

      网友评论

          本文标题:《最长回文子串》

          本文链接:https://www.haomeiwen.com/subject/clpxoqtx.html