研习代码 day49 | 动态规划——子序列问题(回文)

一、回文子串(连续)

        1.1 题目

        给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

        回文字符串 是正着读和倒过来读一样的字符串。

        子字符串 是字符串中的由连续字符组成的一个序列。

        具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"

示例 2:

输入:s = "aaa"
输出:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提示:

  • 1 <= s.length <= 1000
  • s 由小写英文字母组成

        1.2 题目链接

        647.回文子串

        1.3 解题思路和过程想法

        (1)解题思路

        分析:当前的匹配情况会受到之前元素的情况所影响,且影响的方式是类似的,考虑采用动态规划的策略。
        # 数组:以 i 为开端且以 j 为结尾的子串是否为回文子串的结果 dp[i][j]
        # 递推关系:如果子串中间dp[i+1][j-1]是回文子串,且其两外侧元素相等,则 dp[i][j] = True
        # 初始化:为便于最后判断与覆盖,全部初始化为 False
                        dp = [[False]*length for _ in range(length)]
                        result = 0
         # 遍历:因为递推关系是从左下角往右上方向递推,所以遍历方向——从下往上,从左往右

        (2)过程想法

        最初想的是用一维动态规划数组,但是实在找不到递推关系

        1.4 代码

class Solution:def countSubstrings(self, s: str) -> int:length = len(s)# 数组:以i为开端且以j为结尾的子串是否为回文子串的结果 dp[i][j]# 递推关系:如果子串中间dp[i+1][j-1]是回文子串,且其两外侧元素相等,则 dp[i][j] = True# 初始化:为便于最后判断与覆盖,全部初始化为 Falsedp = [[False]*length for _ in range(length)]result = 0# 遍历:因为递推关系是从左下角往右上方向递推,所以遍历方向——从下往上,从左往右for i in range(length-1,-1,-1):for j in range(i,length):if s[i] == s[j]:if j-i <= 1:     # 两种情况:只有一个元素,或两相同元素dp[i][j] = Trueresult += 1else:           # 中间不止一个元素,需结合中间子串的结果进行判断if dp[i+1][j-1]:dp[i][j] = Trueresult += 1return result

二、最长回文子序列(不连续)

        2.1 题目

        给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

        子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1:

输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。

示例 2:

输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。

提示:

  • 1 <= s.length <= 1000
  • s 仅由小写英文字母组成

        2.2 题目链接

        516.最长回文子序列

        2.3 解题思路和过程想法

        (1)解题思路

        分析:当前的匹配情况会受到之前元素的情况所影响,且影响的方式是类似的,考虑采用动态规划的策略。   
        # 数组:以i为开端且以j为结尾的子串中回文子串的长度为 dp[i][j]
                             dp = [[0]*length for _ in range(length)]
        # 递推关系:若两外侧元素相等,则 dp[i][j] =  dp[i+1][j-1] + 2
                             否则,dp[i][j] = max(dp[i][j-1], dp[i+1][j])
        # 初始化:因为缺少 i == j 的情况,所以对这部分进行初始化
                             dp[i][i] = 1
        # 遍历:因为递推关系是从左下角往右上方向、从下方往上方、从左方往右方递推,所以遍历方向——从下往上,从左往右

        (2)过程想法

        有上一题的铺垫,这题会好做一些

        2.4 代码

class Solution:def longestPalindromeSubseq(self, s: str) -> int:length = len(s)# 数组:以i为开端且以j为结尾的子串中回文子串的长度为 dp[i][j]dp = [[0]*length for _ in range(length)]# 递推关系:若两外侧元素相等,则 dp[i][j] =  dp[i+1][j-1] + 2#          否则,dp[i][j] = max(dp[i][j-1], dp[i+1][j])# 初始化:因为缺少 i == j 的情况,所以对这部分进行初始化for i in range(length):dp[i][i] = 1# 遍历:因为递推关系是从左下角往右上方向、从下方往上方、从左方往右方递推,所以遍历方向——从下往上,从左往右for i in range(length-1,-1,-1):for j in range(i+1,length):if s[i] == s[j]:dp[i][j] = dp[i+1][j-1] + 2else:            dp[i][j] = max(dp[i][j-1], dp[i+1][j])return dp[0][length-1]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决(error) ERR Errors trying to SHUTDOWN. Check logs.问题~

该问题出现在我在使用shutdown关闭redis服务器时&#xff0c;出现该问题的原因是由于配置文件的日志文件位置未配置或者缺少日志文件 我自己出现该问题是因为缺少日志文件&#xff0c;解决步骤如下所示&#xff1a; 第一步&#xff1a;在该目录下使用touch命令创建日志文件 第…

【工具与中间件】快速构建飞书群聊机器人

文章目录 0. 前言1. 无痛入门1.1 飞书创建群聊机器人1.2 Webhook 请求示例1.3 设置安全策略 2. 实战3. 总结3.1 使用体验3.2 深入使用建议 先进团队用飞书&#xff0c;先进飞书群聊有...... 0. 前言 科技蓬勃发展的今天&#xff0c;我们可以轻松拥有属于自己/团队的机器人。日…

Ubuntu18.04 本地安装CVAT标注工具

写在前面&#xff1a; 1、如果直接clone最新版本的cvat&#xff0c;python版本最好安装3.8的&#xff0c;因为其中部分代码的语法只有高版本的python才可以支持。 2、安装完成以后本地登陆可能出现"cannot connect to cvat server"的错误&#xff0c;可以从Cannot …

制作麒麟oem镜像之通过识别终端品牌与BIOS安装不同内容

原文链接&#xff1a;麒麟oem镜像之识别终端品牌与BIOS安装不同内容 **hello&#xff0c;大家好啊&#xff01;**在个性化和定制化日益成为趋势的今天&#xff0c;操作系统的定制化安装也变得越来越重要。特别是对于企业用户来说&#xff0c;能够根据不同的硬件配置和需求&…

项目实战之RabbitMQ重试机制进行消息补偿通知

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 文章目录 &#x1f31f;架构图&#x…

Python Tkinter库入门与基础

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Tkinter是Python标准库中内置的图形用户界面&#xff08;GUI&#xff09;工具包&#xff0c;提供了创建窗口、按钮、文本框等GUI元素的功能。本文将介绍Tkinter的基础知识&#xff0c;帮助大家快速入门。 安装与…

【华为OD题库-066】冠亚军排名-java

题目 2012伦敦奥运会即将到来&#xff0c;大家都非常关注奖牌榜的情况&#xff0c;现在我们假设奖牌榜的排名规则如下. 1.首先gold medal数量多的排在前面 2.其次silver medal数量多的排在前面 3.然后bronze medal数量多的排在前面 4.若以上三个条件仍无法区分名次&#xff0c;…

【OpenGauss源码学习 —— (VecToRow)算子】

VecToRow 算子 概述ExecInitVecToRow 函数功能参数步骤 ExecVecToRow 函数功能描述参数返回值执行步骤DevectorizeOneBatch 函数 ExecEndVecToRow 函数总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#x…

低成本物联网安全芯片ACL16_S 系列,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

岳阳楼3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 岳阳楼&#xff0c;位于湖南省岳阳市岳阳楼区洞庭北路&#xff0c;地…

Vcenter 6.7 VCSA证书过期问题处理

1. 故障现象 2022年10月25日&#xff0c;登陆VC报错。 按照报错信息&#xff0c;结合官方文档&#xff0c;判断为STS证书过期导致。 vCenter Server Appliance (VCSA) 6.5.x, 6.7.x or vCenter Server 7.0.x 在/var/log/vmware/vpxd-svcs/vpxd-svcs.log看到类似报错: ERRO…

为什么程序员会讨厌PHP编程语言?

闲来无事&#xff0c;逛了某乎看见一篇关于PHP编程的学习指南&#xff0c;深受启发。我们都知道PHP是一种流行的爬虫语言&#xff0c;尤其在Web开发方面。太有很多有点&#xff0c;例如简单易学、支持的成许多等。但是PHP也会存在一些缺点&#xff0c;如代码可读性差&#xff0…

【Java 基础】20 多线程操作方法

文章目录 1.获取和设置线程的名字1&#xff09;获取默认名字2&#xff09;获取自定义的名字 2.判断线程是否启动3.线程的强制执行4.让线程睡一会儿5.中断线程6.守护线程7.线程的礼让 前一节我们介绍了线程的定义、创建方法、状态以及各状态间的转换。在状态转换处只是简单的说明…

Windows下Linkis1.5DSS1.1.2本地调试

1 Linkis: 参考&#xff1a; 单机部署 | Apache Linkis技术分享 | 在本地开发调试Linkis的源码 (qq.com)DataSphere Studio1.0本地调试开发指南 - 掘金 (juejin.cn) 1.1 后端编译 参考【后端编译 | Apache Linkis】】 修改linkis模块下pom.xml,将mysql.connetor.scope修改…

C语言速通笔记(41-62)

40&#xff0e;十六进制转义字符&#xff1a;\x6d才是合法的&#xff0c;前面的0不能写&#xff0c;而且 x 是小写 41&#xff0e;字符型和整型是近亲&#xff1a;两个具有很大的相似之处&#xff0c;所有的字符都有一个它对应的整形数 据的 ASCLL 的数值。如 char a 65 % …

Java Socket编程之基于UDP协议通信

1.说明 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。 它提供了一种标准的接口&#xff0c;使应用程序能够通过网络与其他计算机进行通信。 Socket可以看作是应用程序与网络之间的一个通信端点&#xff0c;类似于电话中…

go-fastfds部署心得

我是windows系统安装 Docker Desktop部署 docker run --name go-fastdfs&#xff08;任意的一个名称&#xff09; --privilegedtrue -t -p 3666:8080 -v /data/fasttdfs_data:/data -e GO_FASTDFS_DIR/data sjqzhang/go-fastdfs:lastest docker run&#xff1a;该命令用于运…

揭秘数据库、数据仓库、数据湖和数据湖之家

您是否想知道数据仓库与数据库有何不同&#xff1f;什么是数据湖和数据湖屋 &#xff1f;让我们用一个假设的例子来理解这些。 Bookster.biz 是全球图书销售领域的新热点。业务蓬勃发展&#xff0c;他们需要跟踪大量数据&#xff1a;数百万本书的庞大目录&#xff0c;全球数百…

还记得当初自己为什么选择计算机?一个程序猿的自述与分享

还记得当初自己为什么选择计算机&#xff1f;一个程序猿的自述与分享 大家好&#xff0c;我是微赚淘客系统的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在我年轻的时候&#xff0c;我选择了计算机专业&#xff0c;这条路虽然曲折艰难&…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<