当前位置: 首页 > news >正文

【代码随想录训练营】Day57-动态规划

代码随想录训练营 Day57

今日任务

647.回文子串
516.最长回文子序列
动态规划总结
语言:Java

647. 回文子串

链接:https://leetcode.cn/problems/palindromic-substrings/

class Solution {
    public int countSubstrings(String s) {
        int[][] dp = new int[s.length()][s.length()];
        //dp[i][j]: 从i~j的子串是否为回文子串
        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(i == j){
                        dp[i][j] = 1;
                    }
                    else if(Math.abs(j - i) == 1){
                        dp[i][j] = 1;
                    }
                    else if(j - i > 1){
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }
                res += dp[i][j];
            }
        }
        return res;
    }
};

/*

        a   b   b   a   c

    a   1   0   0   1   0

    b       1   1   0   0

    b           1   0   0

    a               1   0

    c                   1

*/

516. 最长回文子序列

链接:https://leetcode.cn/problems/longest-palindromic-subsequence/
代码随想录

class Solution {
    public int longestPalindromeSubseq(String s) {
        int[][] dp = new int[s.length()][s.length()];
        //i~j位的最长子串长度
        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++){
                //如果相等,就说明i位和j位都可以加入到当前最长回文子序列中
                if(s.charAt(i) == s.charAt(j)){
                    dp[i][j] = dp[i + 1][j - 1] + 2;
                }
                //如果不相等,就寻找加入i位或j位后最长回文子序列更长的
                else{
                    dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[0][s.length() - 1];
    }
}
/*

        b   b   b   a   b

    b   1   2   3   3   4

    b       1   2   2   3

    b           1   1   2

    a               1   1

    b                   1

*/
/*

        c   b   b   d
    
    c   1   1   2   2

    b       1   2   2

    b           1   1

    d               1

*/

相关文章:

  • 码云线上误删主项目文件夹的恢复
  • Maiores incidunt cupiditate reprehenderit.Ipsam doloribus in.
  • Python内置函数(55)——round
  • 《C++语言程序设计》大作业(三个模块)
  • R语言使用lightgbm包构建多分类的LightGBM模型、使用predict函数和训练好的模型进行预测推理、将推理后的概率值转化为预测标签
  • 计算机毕业设计Java企业售后服务管理系统(源代码+数据库+系统+lw文档)
  • Day19 | 每天五道题
  • 02.java课复习
  • 深入理解ReentrantReadWriteLock源码
  • 【C++基础】 MyArray 自己实现动态数组 类模板
  • JavaScript中常用的高阶函数
  • 快来给你的宠物视频加个表情特效吧
  • 论文笔记|DeepWalk
  • STM32的光敏检测自动智能窗帘控制系统proteus设计
  • week14|week15 查阅文章总结
  • 编写一个方法,去掉一个数组的重复元素。
  • HTML做一个简单的页面(纯html代码)地球专题学习网站
  • Neuroscout:可推广和重复利用的fMRI研究统一平台
  • Arduino开发实例-DIY超声波传感器避障机器人
  • QuTrunk与MindSpore量子神经网络初探
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉