目录

【代码随想录训练营】【Day 60】【动态规划-13】| Leetcode 647, 516

【代码随想录训练营】【Day 60】【动态规划-13】| Leetcode 647, 516

需强化知识点

  • 动态规划-回文系列

题目

647. 回文子串

  • 注意sum(dp)不行
  • j的遍历要倒序,并且 for j in range(i, n):
python 复制代码
class Solution:
    def countSubstrings(self, s: str) -> int:
        n = len(s)
        dp = [[0]*(n) for _ in range(n)]
        result = 0

        for i in range(n-1, -1, -1):
            for j in range(i, n):
                if s[i] == s[j]:
                    if j - i == 0:
                        dp[i][j] = 1
                        result += 1
                    elif abs(j - i) ==  1:
                        dp[i][j] = 1
                        result += 1
                    else:
                        dp[i][j] = dp[i+1][j-1]
                        if dp[i+1][j-1]:
                            result += 1
                else:
                    dp[i][j] = 0
        
        return sum([sum(sublist) for sublist in dp])

516. 最长回文子序列

  • 注意 python int max为 2**31 -1
  • 滑动窗口,固定结束位置的方式,然后注意nums包含0,所以while判断是>=
python 复制代码
class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        n = len(s)
        # 以 i,j 的 最长序列长度
        dp  = [[0] * (n) for _ in range(n)]
        for i in range(n):
            dp[i][i] = 1

        for i in range(n-1, -1, -1):
            for j in range(i+1, n):
                if s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1] + 2
                else:
                    dp[i][j] = max(dp[i+1][j], dp[i][j-1])
        
        return dp[0][n-1]
                
        
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
学习编程的gas7 分钟前
数据结构——二叉树
数据结构·算法
its_a_win32 分钟前
蓝桥杯 2023省B 飞机降落 dfs
c++·算法·蓝桥杯
MarvinP1 小时前
python基础:位置互换
开发语言·python·算法
zhglhy1 小时前
随机森林与决策树
算法·决策树·随机森林
BFT白芙堂2 小时前
Franka 机器人x Dexterity Gen引领遥操作精细任务新时代
人工智能·算法·机器学习·具身智能·franka机器人·科研机器人·机器人解决方案
LuckyLay2 小时前
LeetCode算法题(Go语言实现)_38
算法·leetcode·golang
Chiyamin2 小时前
图算法基础
数据结构·c++·算法
C——Coder2 小时前
关于柔性数组
算法·柔性数组
AlgoNewbie2 小时前
牛客周赛 Round 88【题解完成】
算法
luckycoding3 小时前
2747. 统计没有收到请求的服务器数目
算法