Leetcode.516 最长回文子序列

news/2023/5/28 7:31:27

题目链接

Leetcode.516 最长回文子序列

题目描述

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

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

示例 1:

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

示例 2:

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

提示:

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

分析:

本题使用 区间DP 的方式求解。我们定义 f(i,j)f(i,j)f(i,j) sss[l,r][l,r][l,r] 的区间最大回文子序列的长度。按照定义,最终返回的答案为 f(0,n−1)f(0,n-1)f(0,n1) ,即 sss 的整个区间[0,n−1][0,n-1][0,n1] 的最大回文子序列的长度

状态转移:

  • s[i]==s[j]s[i] == s[j]s[i]==s[j] 时,f[i][j]=f[i+1][j−1]+2f[i][j] = f[i+1][j-1] + 2f[i][j]=f[i+1][j1]+2。如同这样的形式 “a bbb…abb a”,此时的 f[i][j]f[i][j]f[i][j] 就等于 已经确定的两个相同的字符长度 2 加上中间的那一段最大回文子序列的长度,即 f[i+1][j−1]f[i+1][j-1]f[i+1][j1]
  • s[i]!=s[j]s[i] != s[j]s[i]!=s[j] 时,f[i][j]=max(f[i+1][j],f[i][j−1])f[i][j] = max(f[i+1][j],f[i][j-1])f[i][j]=max(f[i+1][j],f[i][j1])。如果这样的形式 “a bbbc…bbba c”,因为字符 a!=ca != ca!=c,也就是说同时考虑 s[i]和s[j]s[i] 和 s[j]s[i]s[j],不会使回文子序列的长度增加,所以我们要分别考虑取最大值。 有可能 “a bbbc…bbba c” 这一段回文子序列的长度更大,即f[i][j−1]f[i][j-1]f[i][j1];也有可能 “a bbbc…bbba c” 这一段回文子序列的长度更大,即f[i+1][j]f[i+1][j]f[i+1][j]。所以取最大值即可。

时间复杂度:O(n2)O(n^2)O(n2)

C++代码:

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();int f[n][n];memset(f,0,sizeof f );for(int i = 0;i < n;i++) f[i][i] = 1;for(int i = n - 1;i >= 0;i--){for(int j = i + 1;j < n;j++){if(s[i] == s[j]) f[i][j] = f[i+1][j-1] + 2;else f[i][j] = max(f[i+1][j],f[i][j-1]);}}return f[0][n-1];}
};

Java代码:

class Solution {public int longestPalindromeSubseq(String s) {int n = s.length();int[][] f = new int[n][n];//初始化 区间长度为1的情况 此时只有一个字符 肯定是回文序列,所以长度初始化为1for(int i = 0;i < n;i++) f[i][i] = 1;for(int i = n - 1;i >= 0;i--){for(int j = i + 1;j < n;j++){if(s.charAt(i) == s.charAt(j)) f[i][j] = f[i+1][j-1] + 2;else f[i][j] = Math.max(f[i+1][j],f[i][j-1]);}}return f[0][n-1];}
}

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

jQuery选择器及事件

|-----jQuery选择器是jQuery的核心&#xff1a;$("选择器")&#xff1a;工厂函数|-----基本选择器 n 基本选择器包括标签选择器、类选择器、ID选择器、并集选择器(,)和全局选择器 *&#xff1a;body |-----层次选择器 素材 <section id"book"> …

莫言出力、章泽天站台!京东百万豪奖作家背后是文娱野心

5月31日&#xff0c;第二届京东文学奖颁奖典礼在北京举办。著名作家王安忆《红豆生南国》获得年度京东文学奖&#xff08;国内作家作品&#xff09;&#xff1b;美国作家玛丽莲罗宾逊的《管家》获得年度京东文学奖&#xff08;国际作家作品&#xff09;&#xff1b;刘洵的《翼娃…

【​观察】开启智能教育全新模式 京东云价值与使命升级

申耀的科技观察读懂科技&#xff0c;赢取未来&#xff01;众所周知&#xff0c;“十三五”阶段&#xff0c;中国教育模式、形态、内容和学习方式都在发生深刻变革&#xff0c;“资源不平衡”和“管理不协同”成为十三五期间教育信息化建设最后一公里的关键性问题。从这个角度来…

JQuery——选择器作业

一、省市级连 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script>function sel(){var provincedocument.getElementById("province").value;var citydocument.getElementById("c…

6JS库-前端框架(库)-jQuery选择器

#jQuery选择器 请列举出在CSS中学习过的选择器的类型 jQuery选择器的优势有哪些&#xff1f; jQuery选择器包括哪几大类&#xff1f; 通过位置选取元素的jQuery选择器有哪些&#xff1f; 课件 1jQuery选择器 2jQuery选择器分类 jQuery选择器功能强大&#xff0c;种类也很多…

vmware安装win7*64位时,安装不成功的关键点是光驱接口类型选择为IDE模式

mware 安装win7*64时&#xff0c;找不到光盘&#xff0c;后来在xin7*64的虚拟机下的编辑虚拟机设置 找到光驱&#xff0c;点击高级&#xff0c;并选择IDE即可&#xff0c;这样就可以进入虚拟机找到光驱和硬盘到了。进入winpe后可以看到各种工具&#xff0c;如果不选IDE&#xf…

产品经理分类及职责

产品经理在不同性质的公司属于不同的部门&#xff0c;以前产品经理更多是配合市场部&#xff0c;现在大部分产品经理是在产品部。 市场部的产品经理职责更多是根据从产品找目标用户&#xff0c;发掘产品优势&#xff0c;制定营销方案。和销售部门紧密配合&#xff0c;有可能还…

自定义销售职责下的价目表不能对物料编码报价

系统版本: RDBMS :9.2.0.6.0 Oracle 应用产品 : 11.5.10.2 业务场景: 客户需要退半成品物料&#xff0c;由于之前该半成品物料没有设置可以销售&#xff0c;让产品工程部的用户把相关(订单管理)设置项配好以后。销售的同事新增价目表行时&#xff0c;无法选择至该物料。…

计算机视觉算法——基于深度学习的高精地图算法(HDMapNet / VectorMapNet / MapTR / VectorNet)

计算机视觉算法——基于深度学习的高精地图算法&#xff08;HDMapNet / VectorMapNet / MapTR / VectorNet&#xff09;计算机视觉算法——基于深度学习的高精地图算法&#xff08;HDMapNet / VectorMapNet / MapTR / VectorNet&#xff09;1. HDMapNet1.1 网络结构及特点1.1.1…

java基本数据类型对象包装类

java基本数据类型对象包装类 一、包装类说明 为了方便操作基本数据类型值&#xff0c;将其封装成了对象&#xff0c;在对象中定义了属性和行为丰富了该数据的操作。用于描述该对象的类就称为基本数据类型对象包装类。 基本数据类型与相应的包装类 byte Byte sh…

项目经验不多时如何在简历中包装自己?

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;题目来自于论坛一个讨论中的话题如何在简历中…

包装自己-如何做一个骗子

在一个偶然的瞬间&#xff0c;发现了网上发的菲律宾it骗局&#xff0c;从而引发出培训机构的人头倒卖和不负责任&#xff0c;另外看到一份杀猪攻略。 杀猪盘&#xff0c;不只是it行业&#xff0c;是“从业者们”自己起的名字&#xff0c;是指放长线“养猪”诈骗&#xff0c;养得…

HTML5+CSS3小实例:炫彩的发光字特效

前言&#xff1a; 今天我们向大家精选了一款HTML5CSS3文字特效&#xff0c;文字特效有超酷的动画类型&#xff0c;不多说&#xff0c;一起来看看。 描述&#xff1a; 这款文字特效既有倒影的效果&#xff0c;又有随机的颜色&#xff0c;看起来非常的炫酷。全文基于 HTML5CSS3 完…

idea自定义导包个数不带*

背景 在开发过程中&#xff0c;一个类中业务可能会很复杂&#xff0c;需要导入很多包&#xff0c;但是idea同一个包下超过5个会自动默认设置为号(比如import com.blog.andy.api.dto.* ; )&#xff0c;这样其实是不好的&#xff0c;万一这个包下许多类&#xff0c;就会影响性能&…

23种设计模式(六)——装饰模式【单一职责】

文章目录 意图什么时候使用装饰真实世界类比装饰模式的实现装饰模式的优缺点亦称: 装饰者模式、装饰器模式、Wrapper、Decorator 意图 装饰者模式(Decorator Pattern)允许向一个现有的对象扩展新的功能,同时不改变其结构。主要解决直接继承下因功能的不断横向扩展导致子类…

idea如何设置导包不带*号

idea 如果没有设置 默认超过5个相同包的类就会变成 * 号&#xff0c; 这其实是很容易满足的&#xff0c;而且随着代码量的增多&#xff0c;我们往往不会去注意到顶部的导包代码。 当一个类导入的包太多时&#xff0c;往往会影响到整个工程的启动速度&#xff0c;增加缓存。 所…

IDEA自动导包设置,敲代码直接起飞

IDEA自动导包设置 今天在一个新电脑上配置环境&#xff0c;发现没有自动导包功能&#xff0c;我这边还是做一个记录吧。方便我日后查看&#xff0c;也方便大家查看。 在settings–》Editor–》General–》Auto Importw–》在java栏中勾选如下图中两个选项。 勾选完之后&…

IDEA中导包没有提示包问题的解决

今天魔力圆圈和大家分享一个关于idea中提示包用不了(用AltEnter不能导包&#xff0c;只能手打进行导包)&#xff0c;有一次我打代码时发现&#xff0c;我要导入注解的包怎么导入都没有用(需要手打进行导包)&#xff0c;我还以为我idea有问题&#xff0c;我又去创建了一个新的项…

IDEA从零到精通(33)之IDEA优化导包(自动导入包、删除包)

文章目录作者简介引言导航概述设置测试实例小结导航热门专栏推荐作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性…

java面向对象,全是对象,这么多对象2023015

面向对象&#xff08;一遍一遍的领悟&#xff09; Java支持面向对象的三大特征&#xff1a;封装、继承和多态&#xff0c; Java提供 了private、protected和public三个访问控制修饰符来实现良好的封装&#xff0c;提供了extends关键字来让子类继承父类&#xff0c;子类继承父类…