想要精通算法和SQL的成长之路 - 最长回文子序列

news2024/11/18 18:46:28

想要精通算法和SQL的成长之路 - 最长回文子序列

  • 前言
  • 一. 最长回文子序列

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 最长回文子序列

原题链接

在这里插入图片描述
首先,我们看下动态规划方程的定义,我们用dp[i][j] 来代表:字符串s在下标区间为[i,j]之间的最长回文子序列。

那么请问,最终的返回结果,就是我们要求得字符串s的最长回文子序列,那也就是求得dp[0][len-1]的值。那么自然而然的,我们就需要自底向上的去递归。

  • 第一层循环:下标为left,范围:[0,len-1],我们从后往前遍历。
  • 第二层循环:下标为right,范围[left+1,len-1],从前往后遍历。

试想一下,第一层为啥要从后往前遍历?我们反过来想一下,如果从左往右遍历,那么第一层的第一次循环,left就是0,那么dp[0][len-1]是不是在第二层循环的末尾就直接算出来了?此时没有走完所有的场景。

那么写成代码就是:

for (int left = len - 1; left >= 0; left--) {
    for (int right = left + 1; right < len; right++) {
    }
}

紧接着,循环的时候,递归方程怎么写?根据题目意思,我们针对leftright对应的字符串分三种情况:

  • 如果s.charAt(left) == s.charAt(right)dp[left][right] = dp[left + 1][right - 1] + 2;
    在这里插入图片描述
  • 否则,左右两端不相等,那么此时左侧left的字符我们视为删除: dp[left][right] = dp[left + 1][right] ,要么右侧right的字符我们视为删除: dp[left][right] = dp[left][right - 1] ,两者取最大值。

因为我们的dp动态规划方程定义的是区间内的最大子序列长度,所以我们一定要做到区间的全覆盖性。我们必须选择左侧或者右侧的最近字符,并纳入计算。

最后还要注意一点的就是:回文子序列的最短长度是1,即单字符本身,我们要在每次外侧循环的时候,给个初始值。dp[left][left] = 1;

最后成代码就是:

public class Test516 {
    public int longestPalindromeSubseq(String s) {
        int len = s.length();
        int[][] dp = new int[len][len];
        for (int left = len - 1; left >= 0; left--) {
            dp[left][left] = 1;
            for (int right = left + 1; right < len; right++) {
                if (s.charAt(left) == s.charAt(right)) {
                    dp[left][right] = dp[left + 1][right - 1] + 2;
                } else {
                    dp[left][right] = Math.max(dp[left + 1][right], dp[left][right - 1]);
                }
            }
        }
        return dp[0][len - 1];
    }
}

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

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

相关文章

Java“牵手”lazada商品列表页数据采集+lazada商品价格数据排序,lazadaAPI接口申请指南

Lazada是东南亚首屈一指的网上购物平台&#xff0c;中文名为来赞达&#xff0c;拥有较多的品牌和销售商。2016年&#xff0c;Lazada成为阿里巴巴集团的区域旗舰&#xff0c;并得到了阿里巴巴一流的技术基础设施的支持。 Lazada来赞达在2012年成立&#xff0c;总部设在新加坡&a…

JavaScript基础知识11——运算符:赋值运算符

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天公乌素这缺水的镇子&#xff0c;稀稀拉拉下了一天的雨&#xff0c;一场秋雨一场寒&#xff0c;风开始愈发清凉。 看日历发现明天就是二十四节气里的白露了&#xff0c;都白露了&#xff0c;原来不知不觉已经深秋了…

笔记(五)-传统图机器学习的特征工程-全图

1、引言 -提取出的特征要能够反应全图结构特点 2、全图信息种类 Bag-of-Nodes Bag-of-Nodes degrees -就是找同分异构体 -和节点特征的子图不同的是 可以存在孤立结点计算全图的子图个数&#xff0c;而不是特定邻域的子图个数 Graphlet kernel -两个图作数量积&#xff0c;…

Unity 安装及运行MLAgents

1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…

如何修复丢失的vcruntime140_1.dll文件

在编程中&#xff0c;我们经常会遇到各种问题和挑战。其中之一就是缺少必要的运行库文件&#xff0c;如vcruntime140_1.dll&#xff0c;这可能会导致我们的程序无法正常运行。本文将详细介绍6种解决此问题的方法&#xff0c;并详细讲解vcruntime140_1.dll文件的作用。 vcruntim…

企业级SpringBoot单体项目模板 —— 全局配置

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot、模版、企业级☀️每日 一言&#xff1a;你坚持下来了&#xff0c;而别人坚持不下来&#xff0c;这就是你的资本。 文章目录 一、全局异常配置1.1 全局异常处理1.2 处理业务异常类1.3…

并查集 size 的优化

我们把如下图所示的并查集&#xff0c;进行 union(4,9) 操作。 合并操作后的结构为&#xff1a; 可以发现&#xff0c;这个结构的树的层相对较高&#xff0c;若此时元素数量增多&#xff0c;这样产生的消耗就会相对较大。解决这个问题其实很简单&#xff0c;在进行具体指向操作…

【陕西理工大学-数学软件实训】数学实验报告(8)(数值微积分与方程数值求解)

目录 一、实验目的 二、实验要求 三、实验内容与结果 四、实验心得 一、实验目的 1. 掌握求数值导数和数值积分的方法。 2. 掌握代数方程数值求解的方法。 3. 掌握常微分方程数值求解的方法。 二、实验要求 1. 根据实验内容&#xff0c;编写相应的MATLAB程序&#xff0c…

Java IO 之 BIO、NIO 和 AIO

一、IO IO 是 Input 和 Output 二词的缩写&#xff0c;意为输入和输出&#xff0c;直接来说&#xff0c;实现一般的 I/O 是没有什么难度的&#xff0c;但涉及到多线程时&#xff0c;要解决 I/O 的问题就不是一个简单的事情了&#xff0c;会涉及到同步和异步的问题&#xff0c;…

SSL加速是什么,有什么优势?

SSL加速技术是一种专门用于加速HTTPS通信的技术&#xff0c;它可以在服务器和客户端之间提供高效的加密和解密处理&#xff0c;以提升网络通信的安全性和性能。以下是SSL加速技术的一些主要优势&#xff1a; 提高网站的访问速度&#xff1a;SSL加速技术可以对SSL握手过程进行优…

1143. 最长公共子序列(C++实现)

1143. 最长公共子序列https://leetcode.cn/problems/longest-common-subsequence/ int longestCommonSubsequence(string text1, string text2) {int m text1.size(), n text2.size();vector<vector<int>> dp(m 1, vector<int>(n 1));for (int i 0; i …

C++文件操作示例

C 标准库提供了 3 个类用于实现文件操作&#xff0c;它们统称为文件流类&#xff0c;这 3 个类分别为&#xff1a; ifstream&#xff1a;专用于从文件读取数据 ofstream&#xff1a;专用于向文件写入数据 fstream&#xff1a;可读可写 这三个文件流类都位于 fstrea…

NSS [HNCTF 2022 WEEK2]easy_sql

NSS [HNCTF 2022 WEEK2]easy_sql 这题考察了无列名注入&#xff0c;首先了解一下什么是无列名注入再开始做题吧。 为什么会需要无列名注入&#xff1f; 我们常用的SQL注入方法是通过information_schema这个默认数据库来实现&#xff0c;可是你有没有想过&#xff0c;如果过滤…

下载github中单独某个子文件方法

在github中下载文件有很多方法&#xff0c;比如整体打包下载&#xff0c;单独小文件下载。我分享一个怎样下载某个单独文件夹方法。 在下载这个E文件夹时候&#xff0c;复制当前的url。 然后找到一个工具网页&#xff1a;DownGit 然后就可以下载文件夹的压缩文件了。

【机器学习】TF-IDF以及TfidfVectorizer

TF-IDF定义 TF-IDF&#xff1a; 全称为"词频一逆文档频率"。   TF&#xff1a;某一给定词语在该文档中出现的频率。 T F w 词语 w 在该文档中个数 该文档内总词个数 TF_w \frac{词语w在该文档中个数}{该文档内总词个数} TFw​该文档内总词个数词语w在该文档中个…

FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地

FreeSWITCH 1.10.10 简单图形化界面9 - 鼎兴FXO网关SIP中继内网IPPBX落地 0、 界面预览1、创建一个话务台2、创建PBX SIP中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO 网关相关信息6、设置FXO网关端口组呼入号码7、设置FXO网关的SIP中继8、设置FXO网关呼叫…

第二章 进程与线程 十、调度算法1(先来先服务、短作业优先、最高响应比优先)

目录 一、先来先服务算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺点 优点&#xff1a; 缺点&#xff1a; 6、是否会导致饥饿 7、例子 二、短作业优先算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺…

Linux多线程【线程控制】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、线程知识补充1.2、线程私有资源1.3、线程共享资源1.4、原生线程库 2、线程…

FreeSWITCH 1.10.10 简单图形化界面8 - 讯时FXO网关SIP注册公网IPPBX落地

FreeSWITCH 1.10.10 简单图形化界面8 - 讯时FXO网关SIP注册公网IPPBX落地 0、 界面预览1、创建一个话务台2、创建PBX 分机中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO 网关相关信息6、设置FXO网关中继线路呼入号码7、设置FXO网关呼叫路由&#xff08;呼入…

为啥我的第二个for循环不加框红的代码就运行失效呢?(文末赠书)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 苟全性命于乱世&#xff0c;不求闻达于诸侯。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python最强王者群【哎呦喂 是豆子&#xff5e;】问了一…