首页 > 其他 > 详细

力扣5题 最长回文子串

时间:2019-09-10 18:06:55      阅读:91      评论:0      收藏:0      [点我收藏+]

最长回文字符串

class Solution:
    def longestPalindrome(self,s):
        if not s: return 0,None                                     #边界,字符为空
        if len(s) <= 1: return 1,s                                  #边界,只有一个
        dp = [[False for _ in range(len(s))]for _ in range(len(s))] #状态定义,从某个端到某个端是否回文
        longest = 1                                                 #最长度初值为1
        res = s[0]                                                  #其回文初值为第一个元素
        for r in range(1,len(s)):                                   #右下标从1到最后遍历
            for l in range(r):                                      #左下标从0到右下标遍历
                if s[l]==s[r] and ((r-l)<=2 or dp[l+1][r-1]):       #如果两端相等,并且下标差值小于等于2或者前一个字符串也是回文
                    dp[l][r] = True                                 #就定义当前的字符串也是回文
                    cur_len = r-l+1                                 #此时的最大长度为r-l+1
                    if cur_len > longest:                           #如果当前的长度大于最大长度
                        longest = cur_len                           #将当前的长度进行缓存
                        res = s[l:r+1]                              #缓存当前的结果
        return longest,res

if __name__ == __main__:
    solution = Solution()
    s = abaabcdcba                                               #回文是abcdcba,长度为7
    longest,res = solution.longestPalindrome(s)
    print(最长为:,longest,,其子串为:,res)

 

力扣5题 最长回文子串

原文:https://www.cnblogs.com/missidiot/p/11498701.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!