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
    
  • 相关阅读:
    js 跨域问题 汇总
    js 数组的常用方法
    移动端web总结
    BitCoinCore配置文件解读
    同一台主机部署两个比特币钱包以及rpc服务的摘要
    ubuntu启动进程笔记
    C#按制定的环境编译替换不出对应的配置项的解决措施。
    【转】Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
    C#执行javascript代码,执行复杂的javascript代码新方式
    linux小笔记
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13124226.html
Copyright © 2011-2022 走看看