zoukankan      html  css  js  c++  java
  • 力扣5题 最长回文子串

    最长回文字符串

    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)
  • 相关阅读:
    ConcurrentHashMap 实现缓存类
    maven 时区设置&ip&jdk编译版本
    【Hutool】工具类之日期时间工具-DateUtil
    正则表达式
    kafka connector
    kafka
    debezium、kafka connector 解析 mysql binlog 到 kafak
    网络流
    斜率优化
    8.8
  • 原文地址:https://www.cnblogs.com/missidiot/p/11498701.html
Copyright © 2011-2022 走看看