zoukankan      html  css  js  c++  java
  • LeetCode 5.最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"

    思路:动态规划,
    dp[i][j] 记录 s[i:j] 是不是一个回文串,判断回文串满足以下2个条件

    1. s[i] = s[j]
    2. s[i+1:j-1] 是一个回文串,这里用一个条件判断 i+1 >= j-1, 初始化 长度为1 和 长度为0 的串为回文串
    class Solution:
        def longestPalindrome(self, s: str) -> str:
            if not s:
                return s
            dp = [[0 for _ in range(len(s))] for __ in range(len(s))]
            ans = s[0]
            for substr_len in range(1,len(s)+1):
                for i in range(len(s)-substr_len+1):
                    if substr - len(ans)>2:
                        break
                    #print(substr_len,i)
                    if substr_len == 1:
                        dp[i][i] = 1
                    elif substr_len == 2 and s[i] == s[i+1]:
                        dp[i][i+1] = 1
                        ans = s[i:i+substr_len]
                    else:
                        if dp[i+1][i+substr_len-2] == 1 and s[i] == s[i+substr_len-1]:
                            dp[i][i+substr_len-1] = 1
                            ans = s[i:i+substr_len]
    
            return ans
    
    class Solution:
        def longestPalindrome(self, s: str) -> str:
            if not s:
                return s
            dp = [[0 for _ in range(len(s))] for __ in range(len(s))]
            max_substr_len = 0
            for substr_len in range(1,len(s)+1):
                if substr_len - max_substr_len >2:
                    break
                for i in range(len(s)-substr_len+1):
                    #print(substr_len,i)
                    if substr_len == 1:
                        dp[i][i] = 1
                        ans = s[i:i+substr_len]
                        max_substr_len = substr_len
                    elif substr_len == 2 and s[i] == s[i+1]:
                        dp[i][i+1] = 1
                        ans = s[i:i+substr_len]
                        max_substr_len = substr_len
                    else:
                        if s[i] != s[i+substr_len-1]:
                            continue
                        elif dp[i+1][i+substr_len-2] == 1 :
                            dp[i][i+substr_len-1] = 1
                            ans = s[i:i+substr_len]   
                            max_substr_len = substr_len             
            return ans
    
  • 相关阅读:
    Form表单提交数据的几种方式
    前端基础-HTML
    python入门函数详解
    Python作业编写
    Python入门数据类型详解
    Jquery选择器
    做外链接和有外链接区别
    三层架构
    drop,delete,truncate区别
    run()和star()区别
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13124226.html
Copyright © 2011-2022 走看看