代码随想录算法训练营第五十七天|动态规划part17|647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

  1. 回文子串 Palindromic Substrings - LeetCode

dp[i][j] [i,j]范围内的子串是否是回文子串

1.i == j

2.i j相差1

  1. j - 1 > i dp[i - 1][j - 1]

if (s[i] ==s[j])

if (j - i <= 1) dp[i][j] = true; res++;

else if (dp[i - 1][j - 1] == true) dp[i][j] = true; res++;

初始化:dp[i][j]

dp[i][j] = false

遍历顺序: 从低往上,从左往右

for (int i = size() - 1; i >= 0; i--)

for (int j = i; j < s.length(); j++)

java 复制代码
class Solution {
    public int countSubstrings(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
       // dp[0][0] = false;
        int res = 0;

        for (int i = s.length() - 1; i >= 0; i--) {
            for (int j = i; j < s.length(); j++) {
                if (s.charAt(i) == s.charAt(j)) {
                    if (j - i <= 1) {
                        dp[i][j] = true;
                        res++;
                    } else if (dp[i + 1][j - 1]) {
                        dp[i][j] = true;
                        res++;
                    }

                }
            }
        }
        return res;
    }
}

● 516.最长回文子序列 Longest Palindromic Subsequence - LeetCode

dp[i][j] [i,j]的回文子串并列长度为

if (s[i] == s[j]) dp[i][j] = dp[i + 1][j - 1] + 2//左右都加了一个元素

else dp[i][j] = max(dp[i][j - 1], dp[i + 1][j])

初始化: dp[i][i] = 1;

for (int i = 0; i < s.length(); i++)

dp[i][i] = 1;

遍历顺序:

for (i < s.length() - 1; i >= 0; i--)

for (int j = i + 1; j < s.length(); j++)

java 复制代码
class Solution {
    public int longestPalindromeSubseq(String s) {
        int[][] dp = new int[s.length()][s.length()];
        for (int i = 0; i < s.length(); i++) {
            dp[i][i] = 1;
        }

        for (int i = s.length() - 1; i >= 0; i--) {
            for (int j = i + 1; j < s.length(); j++) {
                if (s.charAt(i) == s.charAt(j)) {
                    dp[i][j] = dp[i + 1][j - 1] + 2;
                } else {
                    dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[0][s.length() - 1];
    }
}

● 动态规划总结篇

相关推荐
CoovallyAIHub40 分钟前
何必先OCR再LLM?视觉语言模型直接读图,让百页长文档信息不丢失
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
NAN-DETR:集中式噪声机制如何让检测更“团结”?
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
火箭工程大学多模态遥感检测新框架MROD-YOLO:如何将小目标检测精度提升至77.9%?
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
未来物体检测趋势:需要关注的 7 个关键问题
深度学习·算法·计算机视觉
业精于勤的牙1 小时前
小张刷题计划(二)
数据结构·算法
谈笑也风生1 小时前
期望个数统计(二)
算法
hans汉斯1 小时前
【人工智能与机器人研究】人工智能算法伦理风险的适应性治理研究——基于浙江实践与欧美经验的整合框架
大数据·人工智能·算法·机器人·数据安全·算法伦理·制度保障
CoderYanger1 小时前
动态规划算法-两个数组的dp(含字符串数组):42.不相交的线
java·算法·leetcode·动态规划·1024程序员节
南莺莺2 小时前
二叉排序树的创建和基本操作---C++实现
数据结构·c++·算法··二叉排序树
仰泳的熊猫2 小时前
1061 Dating
数据结构·c++·算法·pat考试