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

516 最长回文子序列(区间DP)(灵神笔记)

题目

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

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

示例 1:

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

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

提示:

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

题解

记忆化搜索

class Solution {private char[] str;private int[][] cache;public int longestPalindromeSubseq(String s) {this.str = s.toCharArray();int n = str.length;cache = new int[n][n];for (int i = 0; i < n; i++) {Arrays.fill(cache[i], -1);}return dfs(0, n - 1);}private int dfs(int i, int j) {if (i > j) {return 0;}if (i == j) {return 1;}if (cache[i][j] != -1) {return cache[i][j];}if (str[i] == str[j]) {return cache[i][j] = dfs(i + 1, j - 1) + 2; //都选}//选或不选return cache[i][j] = Math.max(dfs(i + 1, j), dfs(i, j - 1));}
}

时间复杂度:O(n^2) 一共有n*n个状态
空间复杂度:O(n^2)

递推

class Solution {public int longestPalindromeSubseq(String s) {char[] str = s.toCharArray();int n = str.length;int[][] f = new int[n][n];for (int i = n - 1; i >= 0; i--) {f[i][i] = 1; // i==jfor (int j = i + 1; j < n; j++) {f[i][j] = str[i] == str[j] ? f[i + 1][j - 1] + 2 :Math.max(f[i + 1][j], f[i][j - 1]);}}return f[0][n - 1];}
}

时间复杂度:O(n^2) 一共有n*n个状态
空间复杂度:O(n^2)

空间优化

class Solution {public int longestPalindromeSubseq(String s) {char[] str = s.toCharArray();int n = str.length;int[] f = new int[n];for (int i = n - 1; i >= 0; i--) {f[i] = 1; // i==jint pre = 0; // f[i+1][i]for (int j = i + 1; j < n; j++) {int tmp = f[j];f[j] = str[i] == str[j] ? pre + 2 : Math.max(f[j], f[j - 1]);pre = tmp;}}return f[n - 1];}
}

时间复杂度:O(n^2) 一共有n*n个状态
空间复杂度:O(n)

相关文章:

516 最长回文子序列(区间DP)(灵神笔记)

题目 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s …...

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…...

嵌套for循环在外层循环和内层循环中使用两个Executors.newCachedThreadPool缓存线程池执行操作

1. 首先&#xff0c;我们需要创建两个ExecutorService对象&#xff0c;这两个对象将作为我们的缓存线程池。 2. 然后&#xff0c;我们使用嵌套的for循环来执行我们的操作。在每个外层循环中&#xff0c;我们将创建一个新的任务并提交给外层线程池。在这个任务中&#xff0c;我…...

【uniapp+云函数调用】人脸识别,实人认证,适用于app,具体思路解析,已实现

2023.10.8 需求: uniapp开发的app项目中使用人脸识别 app项目都是第一次搞,更别提人脸识别了。目前已有的就是Dcloud账号已申请,实现需求的时间没那么紧迫 此篇会详细记录从0到1的过程 2023.10.24 今天开始探究实现的过程 可能会记录的有些冗余 效果图如下: uniapp开发指南…...

系列十六、bean有哪些生命周期的回调方法?有哪几种实现方式?

一、概述 bean的生命周期的回调方法主要分两种&#xff0c;一种是初始化时进行调用&#xff0c;另外一种是销毁时进行调用。但是不管是初始化还是销毁&#xff0c;都对应着三种方式。 二、实现方式 2.1、注解方式 PostConstruct PreDestroy Component public class UserSe…...

2023平台工程崭露头角,AI 带来新机遇与挑战

在今年&#xff0c;平台工程正在迅速在 IT 企业中崭露头角&#xff0c;成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程&#xff1a;快速采纳和影响》&#xff0c;83%的受访者已经完全实施了平台工程&#xff0c;或正处于某种实施阶段。 平台工…...

如何使用python快速修改Excel表单中的大量数据

python修改Excel中的内容进阶加速版 前面有一篇文章讲到了使用python处理Excel中的数据文件&#xff0c;即修改Excel中的数据&#xff0c;但是那个版本的代码跑点小规模、小数据量的excel还行&#xff0c;一旦数据量达到万条级别&#xff0c;代码运行会非常慢&#xff01;因此&…...

✔ ★【备战实习(面经+项目+算法)】 10.27学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…...

视频分辨率/帧率/码率选择参考

1. 视频码率与分辨率的参考表 1080&#xff0a;720的分辨率&#xff0c;用5000K左右&#xff1b; 720&#xff0a;576的分辨率&#xff0c;用3500K左右&#xff1b; 640&#xff0a;480的分辨率&#xff0c;用1500K左右。 2. 计算公式 基本算法&#xff1a;码率&#xff08;kb…...

LeetCode75——Day18

文章目录 一、题目二、题解 一、题目 1732. Find the Highest Altitude There is a biker going on a road trip. The road trip consists of n 1 points at different altitudes. The biker starts his trip on point 0 with altitude equal 0. You are given an integer …...

Java NIO 高并发开发

Java NIO 高并发开发 前言 Java NIO&#xff08;New I/O&#xff09;相比于传统的Java I/O&#xff08;BIO&#xff09;在高并发开发方面具有以下优势&#xff1a; 非阻塞模式&#xff1a;Java NIO使用非阻塞的I/O操作&#xff0c;允许一个线程管理多个通道&#xff08;Channe…...

8.循环神经网络

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 序列模型一、序列模型二、D2L代码注意点三、QA No.2 文本预处理一、D2L代码注意点二、QA No.3 语言模型一、语言模型二、D2L代码注意点三、QA No.4 循环神经网络 RNN一、RNN二、QA No.5 循环神经网络 RNN 的实现一、从零…...

[C++随想录] map和set的使用

map和set的使用 set初始化finderasecountlower_bound && upper_boundequal_ range mapinsert[ ]运算符 multiset && multimap set — — key模拟 map — — key_value模型 set 初始化 void set_test1() {set<int>s;s.insert(10);s.insert(12);s.insert(…...

公网IP怎么设置?公网ip有哪些优点和缺点?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。其中&#xff0c;公网IP的设置成为了一个备受关注的话题。本文将详细介绍公网IP的设置方法以及公网IP的优点和缺点。 一、公网IP设置方法 1. 路由器设置 在家庭或企业网络中&#xff0c;路由器通常是最重…...

蓝桥杯第 2 场算法双周赛 第2题 铺地板【算法赛】c++ 数学思维

题目 铺地板https://www.lanqiao.cn/problems/5887/learning/?contest_id145 问题描述 小蓝家要装修了&#xff0c;小蓝爸爸买来了很多块&#xff08;你可以理解为数量无限&#xff09;2323 规格的地砖&#xff0c;小蓝家的地板是 nm 规格的&#xff0c;小蓝想问你&#xf…...

APScheduler-调度器 BackgroundScheduler

当你有主程序需要执行&#xff0c;让定时任务在后台执行时&#xff0c;可以用BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler import time # 仅运行定时任务 scheduler BackgroundScheduler() # interval example, 间隔执行,…...

浅谈UI自动化测试

随着软件行业的不断发展&#xff0c;建立一个完善的自动化测试体系变得至关重要。目前&#xff0c;自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言&#xff0c;企业在UI自动化测试方面的覆盖率仍然相对较低。 接口自动化测试可以模拟和执行应用程序…...

golang 工程组件 grpc-gateway—yaml定义http规则,和自定义实现网关路由

yaml定义http规则&#xff0c;和自定义实现网关路由 proto定义http规则总归是麻烦的&#xff0c;因为proto文件还是定义消息&#xff0c;grpc接口好一些。配置http规则有更好的方式。我们可以使用yaml文件定义接口的http规则。 同时有些接口不是只是让网关转发这么简单 有时需…...

在NLP中一下常见的任务,可以用作baseline;MRPC,CoLA,STS-B,RTE

1.MRPC&#xff08;Microsoft Research Paraphrase Corpus&#xff09;任务 是一个用于文本匹配和相似度判断的任务。在MRPC任务中&#xff0c;给定一对句子&#xff0c;模型需要判断它们是否是语义上等价的。MRPC任务的训练集和测试集由约5700对英语句子组成。每个句子对都有…...

【计算机网络笔记】Cookie技术

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

HexView脚本进阶:巧用/CR参数实现多区域数据‘挖空’,为自动化测试铺路

HexView脚本进阶&#xff1a;巧用/CR参数实现多区域数据‘挖空’&#xff0c;为自动化测试铺路 在自动化测试领域&#xff0c;二进制文件的预处理往往决定了测试的深度和效率。想象一下这样的场景&#xff1a;你手头有一份完整的ECU固件文件&#xff0c;但为了验证设备在数据损…...

PasteMD场景应用:微信聊天记录自动整理为会议纪要

PasteMD场景应用&#xff1a;微信聊天记录自动整理为会议纪要 1. 为什么你的会议纪要总是一团糟&#xff1f; 想象一下这个场景&#xff1a; 下午两点&#xff0c;项目组紧急拉了个微信群聊&#xff0c;大家七嘴八舌讨论了半小时&#xff0c;敲定了五个关键事项和三个责任人。…...

Z-Image-Turbo-辉夜巫女完整指南:模型文件结构解析、LoRA注入位置与安全校验

Z-Image-Turbo-辉夜巫女完整指南&#xff1a;模型文件结构解析、LoRA注入位置与安全校验 1. 模型简介与部署准备 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的LoRA变体&#xff0c;专门针对生成日系动漫风格"辉夜巫女"角色图像进行了优化。该模型通过Xinferen…...

拓扑排序不止于理论:用邻接矩阵实现时,我踩过的3个坑和性能优化

拓扑排序实战&#xff1a;邻接矩阵实现中的性能陷阱与优化策略 邻接矩阵作为图论中最直观的存储结构&#xff0c;常被初学者用来实现拓扑排序算法。但当我们真正将其投入实际项目时&#xff0c;往往会遭遇意想不到的性能瓶颈和逻辑陷阱。本文将分享三个真实项目中踩过的坑&…...

Qwen3-VL-4B Pro行业案例:法律合同截图关键条款提取与语义摘要生成

Qwen3-VL-4B Pro行业案例&#xff1a;法律合同截图关键条款提取与语义摘要生成 1. 项目核心能力与应用场景 想象一下&#xff0c;你是一名法务人员或商务经理&#xff0c;每天需要审阅大量来自邮件、聊天记录或扫描件的合同截图。这些截图里包含了付款条款、违约责任、保密协…...

OpenClaw浏览器控制:GLM-4.7-Flash实现自动化数据采集

OpenClaw浏览器控制&#xff1a;GLM-4.7-Flash实现自动化数据采集 1. 为什么选择OpenClaw进行网页数据采集 去年我在做一个市场分析项目时&#xff0c;遇到了一个棘手的问题——需要从十几个行业网站定期采集数据&#xff0c;但每个网站的页面结构都不一样。手动复制粘贴效率…...

如何突破Windows权限限制?NSudo全方位权限管理方案

如何突破Windows权限限制&#xff1f;NSudo全方位权限管理方案 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在…...

从MVS到NeRF的桥梁:手把手拆解MVSNeRF中的代价体与神经编码体

MVSNeRF&#xff1a;当多视图立体视觉遇见神经辐射场的跨界革命 在计算机视觉与图形学的交叉领域&#xff0c;2021年诞生的MVSNeRF如同一位技艺精湛的翻译官&#xff0c;成功搭建了传统多视图立体视觉&#xff08;MVS&#xff09;与新兴神经辐射场&#xff08;NeRF&#xff09;…...

如何快速优化AMD系统:5个实用技巧让Ryzen性能更稳定

如何快速优化AMD系统&#xff1a;5个实用技巧让Ryzen性能更稳定 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…...

嵌入式系统错误处理机制与实现

嵌入式系统中的错误处理机制深度解析1. 错误概念与分类1.1 错误分类体系在嵌入式系统开发中&#xff0c;错误处理是确保系统可靠性的关键环节。从严重性维度分析&#xff0c;程序错误可分为两类&#xff1a;致命性错误&#xff1a;系统无法执行恢复操作&#xff0c;典型处理方式…...