代码随想录 Day48 动态规划16 T647 回文子串 T516最长回文子序列

LeetCode T647 回文子串

题目链接:647. 回文子串 - 力扣(LeetCode)

题目思路:

我们仍然使用动规五部曲来分析题目

1.确定dp数组含义

这里dp数组表示从下标从i到j这段子串是不是回文子串,是就是true,不是就是false

2.确定dp数组的递推公式

举个例子

这里我们要考虑的就是

s[i] == s[j]

s[i] != s[j]

这两种情况

如果s[i] == s[j]

相等里面还要分

i和j下标相同的情况 --- true

i和j相差一个下标   --- true

i和j相差多个下标的情况 ---判断dp[i + 1][j - 1]是否为true.

判断true的时候让临时变量res++,最后返回res的结果表示数量.

而如果是不等于的情况其实就不同处理,因为默认初始化为false

3.初始化dp数组

直接初始化为false即可,因为如果初始化为true就全部匹配上了

那么我们就就无需初始化即可

4.确定遍历顺序

由于我们要推出dp[i][j] 是由左下角的元素推出的,所以我们得倒序遍历i,再正序遍历j

注意,我们定义的区间是[i,j],这里的j的取值一定是大于等于i的,不然我们的遍历其实就是没有意义的.

5.打印dp数组排错

题目代码:

class Solution {
    public int countSubstrings(String s) {
        int len = s.length();
        int res = 0;
        boolean[][] dp = new boolean[len][len];
        for(int i = len-1;i>=0;i--){
            char c1 = s.charAt(i);
            for(int j = i;j<len;j++){
                char c2 = s.charAt(j);
                if(c1 == c2){
                    if(j-i<=1){
                        dp[i][j] = true;
                        res++;
                    }else if(dp[i+1][j-1]){
                        dp[i][j] = true;
                        res++;

                    }
                }
            }
        }
        return res;
    }
}

LeetCode T516 最长回文子序列

题目链接:516. 最长回文子序列 - 力扣(LeetCode)

题目思路:

我们也使用动规五部曲来分析题目

1.确定dp数组含义

这里的dp[i][j]表示的[i到j]的闭区间的回文子串的长度

2.确定dp数组的递推公式

这时候也要判断相等和不等的情况

如果s[i] == s[j]

那么就让dp[i+1][j-1]+2

不等的情况我们就在dp[i][j-1]和dp[i-1][j]中选择一个最大值即可

3.初始化dp数组

这里由于我们的递推公式没有计算i == j的情况

可以理解为递推公式是从这个相等的情况出发,向两边扩散,每次需要有两个字母

所以我们要对 dp[i][i] 进行初始化,也就是单个字母的情况,初始化为1即可

4.确定遍历顺序

这个题也是需要反向遍历的,具体让我们看一下递推公式

dp[i][j]是依赖于这三个方向推出的,所以自然有这样的遍历顺序

注:j要从i+1开始到最后,

所以遍历i的时候一定要从下到上遍历,这样才能保证下一行的数据是经过计算的

5.打印dp数组排错

题目代码:

class Solution {
    public int longestPalindromeSubseq(String s) {
        int len = s.length();
        int[][] dp = new int[len][len];
        for(int i = 0;i<len;i++){
            dp[i][i] = 1;
        }
        for(int i = len-1;i>=0;i--){
            char c1 = s.charAt(i);
            for(int j = i+1;j<len;j++){
                char c2 = s.charAt(j);
                if(c1 == c2){
                    dp[i][j] = dp[i+1][j-1] + 2;
                }else{
                    dp[i][j] = Math.max(dp[i][j-1],dp[i+1][j]);
                }
            }
        }
        return dp[0][len-1];

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/156710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

012.tr

1、用tr进行转换 tr是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。tr可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。tr是translate&#xff08;转换&#xff09;的简写&#xff0c;因为它可以将一组字符转换成另一组字符。 tr只…

ADI 阻抗测量开发板AD5940调试

硬件环境&#xff1a; 评估板A,阻抗测试板 EVAL-AD5940BIOZ&#xff0c;阻抗测试板信息链接如下&#xff1a; https://wiki.analog.com/resources/eval/user-guides/eval-ad5940/hardware/eval-ad5940bioz 评估板B,MCU控制板 EVAL-ADICUP3029&#xff0c;控制板信息链接如下…

【python】——控制语句和组合数据类型(其二)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

鸿蒙OS应用开发初体验

什么是HarmonyOS&#xff1f; HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网&#xff08;IoT&#xff09;时代的全场景操作系统&#xff0c;旨在为各种类型的设备提供统一的操作系统平台和开发框架。Har…

docker删除镜像命令

在Docker中删除镜像的命令是 docker rmi。这个命令用于删除一个或多个Docker镜像。使用这个命令时&#xff0c;你需要指定要删除的镜像的ID或名称。以下是一些常用的用法&#xff1a; 删除单个镜像&#xff1a; docker rmi [IMAGE_ID或REPOSITORY:TAG]例如&#xff0c;如果你知…

最大似然估计的介绍

最大似然估计&#xff08;Maximum Likelihood Estimation&#xff0c;简称MLE&#xff09;是一种用于估计概率分布中参数的方法。该方法的核心思想是选择使得观察到的数据在给定模型下出现的概率最大的参数值作为估计值。 最大似然估计具有很好的性质&#xff0c;包括渐进正态性…

LTE信令流程及业务流程

1、Attach过程 完成完成鉴权、身份验证、用户注册以外&#xff0c;包含默认承载的建立 1)在LTE网络中&#xff0c;PDN连接是默认承载的建立&#xff0c;它是在EPS承载中建立的&#xff0c;主要用于在UE和PDN之间传输数据。 2)在建立PDN连接时&#xff0c;会通过EPS隧道连接到PD…

Windows10安装麒麟桌面V10双系统

概述 想要在Windows10操作系统中安装麒麟V10的桌面操作系统&#xff08;Kylin-Desktop-V10-Professional-Release-Build1-210203-X86_64&#xff09; 安装前准备 1、先搞清楚自己的电脑类型 A MBR传统bios单硬盘 B MBR 传统bios双硬盘&#xff08;SSD固态硬盘机械硬盘&…

atsec at the PCI Community Meeting 2023

atsec participated in the PCI (Payment Card Industry) Security Standards Council 2023 Asia-Pacific Community Meeting held in Kuala Lumpur, Malaysia, on 15 and 16 November and hosted a booth. atsec’s principal consultant Di Li provided a presentation on “…

OceanMind海睿思数据中台迎来重磅更新,使用体验全面提升!

为了帮助客户拥有更好的产品使用体验&#xff0c;帮助实施数据治理项目降本增效&#xff0c;OceanMind海睿思的迭代更新从未止步。 OceanMind数据中台再度迎来重磅更新&#xff0c;该版本在大数据方面进行了规划设计&#xff0c;吸纳了30来自于项目的实际需求&#xff0c;更贴…

openldap-sasl身份认证镜像

背景 在这篇文章中&#xff0c;AD域信息同步至openLDAP我们使用了SASL将身份验证从OpenLDAP委托给AD”这种方案&#xff0c;本文主要来构建此方案的docker镜像。 sasl官网&#xff1a;Cyrus SASL bitnami/openldap镜像地址&#xff1a;containers/Dockerfile bitnami/openl…

React升级到18版本

前言 升级前react版本是16.9.0&#xff0c;react-dom版本为16.9.0&#xff0c;react-router-dom为5.1.2版本。 安装 // npm npm install react react-dom// yarn yarn add react react-dom// pnpm pnpm install react react-dom启动项目 此时&#xff0c;项目可以正常运行&…

计算机领域十大天神

✍️作者简介&#xff1a;沫小北/码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a;沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&…

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

【导师不教&#xff1f;我来教&#xff01;】同济计算机博士半小时就教会了我五大深度神经网络&#xff0c;CNN/RNN/GAN/transformer/LSTM一次学会&#xff0c;简直不要太强&#xff01;_哔哩哔哩_bilibili了解的五大神经网络&#xff0c;整理笔记如下&#xff1a; 视频是唐宇…

git的简单使用

git 的简单使用 前言&#xff1a; 为了方便理解&#xff0c;文中一些内容表达的不是十分准确&#xff0c;如有错误&#xff0c;欢迎大家友善的指出。 接下来就开始了&#xff01;&#xff01; 使用git其实就是围绕下面这个图展开的&#xff0c;大家可以先看下图&#xff0c…

到站上海!见证这座零碳园区的绿色低碳新选择

不知不觉中&#xff0c;科士达新能源的零碳足迹已遍布五洲四海&#xff0c;为全球各地&#xff0c;千行百业、千家万户&#xff0c;带去了源源不断的绿色能源和低碳新选择。再次启航&#xff0c;这一站&#xff0c;抵达上海世博园。 小机身&#xff0c;大配置&#xff0c;灵活适…

【开源】基于Vue.js的社区买菜系统的设计和实现

项目编号&#xff1a; S 011 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S011&#xff0c;文末获取源码。} 项目编号&#xff1a;S011&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

Pandas 将DataFrame中单元格内的字典dict拆分成单独的列

核心是应用 pd.Series&#xff0c; 具体操作如下&#xff1a; import pandas as pddata {years: [2025],week: [{f"week_{i}": i for i in range(3)}]} df pd.DataFrame(data) print(df)df pd.concat([df, df[week].apply(pd.Series)], axis1).drop(week, axis1)…

java学习part03基本类型

22-变量与运算符-标识符的使用_哔哩哔哩_bilibili 1.标识符&#xff08;变量&#xff09;命名规则 2.变量类型 3.整型 4.浮点型 5.char字符 6.布尔boolean 7.基本类型的自动提升 8.强制转换 9.String String只能连接 会把其他类型的表面量转成字符串比如"true" &…

C++--第一个代码hello world

本篇开启C之旅... 先上代码&#xff1a; #include<iostream> using namespace std; int main() {cout << "hello world\n";return 0; }一. #include <iostream> 类比C语言中的#include<stdio.h>, #include <iostream>也是预处理指令…