怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)

leetcode 5 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

思路:

动态规划

为了改进暴力法,我们首先观察如何避免在验证回文时进行不必要的重复计算。考虑

这个示例。如果我们已经知道
是回文,那么很明显,
一定是回文,因为它的左首字母和右尾字母是相同的。

我们给出

的定义如下:

因此,

基本示例如下:

这产生了一个直观的动态规划解法,我们首先初始化一字母和二字母的回文,然后找到所有三字母回文,并依此类推…

ab206c32929a4d020c9e92bdbfeaba7d.png

复杂度分析

  • 时间复杂度:O(n^2)O(n2),这里给出我们的运行时间复杂度为 O(n^2)O(n2) 。
  • 空间复杂度:O(n^2)O(n2),该方法使用 O(n^2)O(n2) 的空间来存储表。

具体写码的时候用一个变量(代码中的sub)来记录目前最长的子串长度,用一个list(代码中的max_len)来记录最长子串的坐标

另一个leetcode上速度比较快的算法有点类似滑动窗口法,维护一个最大长度为lenth的窗口,并使用python语法糖q == q[::-1]来判断是否是回文字符串,但是要注意的是维护窗口时要同时维护奇数和偶数两种窗口。

答案:

class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""n = len(s)if n == 0:return ''if n == 1:return sres = [[0 for _ in range(n)] for _ in range(n)]sub = 1max_len = [0,0]for i in range(n):res[i][i] = 1if i != n-1 and s[i] == s[i+1]:res[i][i+1] = 1sub = 2max_len=[i,i+1]for i in range(n):for j in range(1,min(i,n-i)+1):if i-j>=0 and i+j<n and res[i-j+1][i+j-1] and s[i-j]==s[i+j]:res[i-j][i+j] =1#print 1+2*jif sub<1+2*j:sub = 1+2*jmax_len = [i-j,i+j]#print sub,max_lenif i-j>=0 and i+1+j<n and res[i-j+1][i+j] and s[i-j] == s[i+j+1]:res[i-j][i+j+1] =1if sub<2+2*j:sub = 1+2*jmax_len = [i-j,i+j+1]#print sub,max_lenreturn s[max_len[0]:(max_len[1]+1)]
class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""if len(s) == 1 or s == s[::-1]:return sstart = 0length = 1for i in range(len(s)):p = s[i-length-1:i+1]q = s[i-length:i+1]if i-length-1 >= 0 and p == p[::-1]:start = i-length-1length += 2if i-length >=0 and q == q[::-1]:start = i - lengthlength += 1return s[start:start+length]

[647] 回文子串

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

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

示例 1:

输入: "abc"

输出: 3

解释: 三个回文子串: "a", "b", "c".

示例 2:

输入: "aaa"

输出: 6

说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".

注意:

输入的字符串长度不会超过1000。

思路:

这道题的动态规划思路跟上一道题(第五题)完全一样,只不过在具体代码的时候,使用一个变量来记录回文子串的个数。

[516] 最长回文子序列

给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。

示例 1:

输入:

"bbbab"

输出:

4

一个可能的最长回文子序列为 "bbbb"。

示例 2:

输入:

"cbbd"

输出:

2

一个可能的最长回文子序列为 "bb"。

思路:

这道题跟上两道题的动态规划思路完全不一样,首先,这道题寻找的是最长回文子序列,子序列可以不相连。其次,这道题要返回的是最长回文子序列的长度,不关心子序列,所以构造动态规划数组时也稍有不同。具体来说:

引入

,表示第i个字符至第j个字符组成的子串中最长回文子序列的长度。

递推公式可以表示为:

1e55d60fd8c4b8a9710c5dd435828023.png

注意在具体代码的时候,循环应该是先判断间隔距离为1的所有字符对,然后依次增加。

答案:

class Solution(object):def longestPalindromeSubseq(self, s):""":type s: str:rtype: int"""n = len(s)if n<=1:return nif n==2:if s[0]==s[1]:return 2else:return 1resgrid = [[0 for _ in range(n)] for _ in range(n)]for i in range(n):resgrid[i][i]=1for gap in range(1,n):for i in range(n):if i+gap>=n:breakl = ih = i+gapif s[l]==s[h]:resgrid[l][h] = resgrid[l+1][h-1]+2else:resgrid[l][h]=max(resgrid[l+1][h],resgrid[l][h-1])return resgrid[0][n-1]

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

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

相关文章

张亚勤:对于产业来讲,深度学习的黄金时代刚刚开始

大数据文摘出品由中国计算机学会(CCF)举办的计算领域年度盛会CNCC 2020今天在北京隆重开幕&#xff0c;大会主题是“信息技术助力社会治理”。大会设有14个特邀报告、3场大会论坛、百余场技术论坛以及CCF CTO峰会等多场活动&#xff0c;邀请到超过400位国内外计算机领域知名专家…

去月球“你知道戴维会变身成哪种动物吗?”

在《去月球》游戏中&#xff0c;有一节会遇到一个问题&#xff1a; “你知道戴维会变身成哪种动物吗&#xff1f;” &#xff08;请用英语大写字母回答&#xff09; 其实这个答案&#xff0c;和上面的回忆对话&#xff0c;就能知道了&#xff0c;看下图 答案就是&#xff1a;CO…

erp实施 数据库面试题_ERP管理系统多少钱

ERP系统本质上是一套软件包&#xff0c;可以执行会计&#xff0c;产品计划和开发&#xff0c;制造&#xff0c;库存管理&#xff0c;销售管理&#xff0c;人力资源和其他业务任务。很多企业在选择ERP系统的时候都会比较关心费用的问题&#xff0c;其实ERP系统价格受很多方面因素…

美军军事通信系统简史

来源&#xff1a;对讲机世界大家都知道&#xff0c;美军发明了互联网。但是&#xff0c;你也许不知道&#xff0c;今天的移动通信网络的前身正是美军的MSE (Mobile Subscriber Equipment&#xff0c;美军移动用户设备系统&#xff09;。80年代&#xff0c;美军开始寻找新的技术…

html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框

html知识点之利用css四边形切角并且加上边框html知识点之利用css四边形切角并且加上边框前言这几个月做了很多前端工作&#xff0c;其中一个需求还是蛮头疼&#xff0c;UI给的图上面的四边形是一个带斜边的&#xff0c;直接用背景图可以实现&#xff0c;但是会出现各种布局的问…

java this关键字的使用_Java关键字(五)——this

大家好&#xff0c;我是可乐&#xff0c;一个专注原创&#xff0c;乐于分享的程序猿。 本系列教程持续更新&#xff0c;可以微信搜索「 IT可乐 」第一时间阅读。回复《电子书》有我为大家特别筛选的海量免费书籍资料this 也是Java中的一个关键字&#xff0c;在《Java编程思想》…

受小动物大脑结构启发,研究人员开发出新的深度学习模型:更少神经元,更多智能...

大数据文摘出品来源&#xff1a;sciencedaily编译: 朱科锦、coolboy从搜索引擎到自动驾驶汽车&#xff0c;人工智能已经进入了我们的日常生活。这与近年来计算能力的巨大提升有关。但是&#xff0c;最新的人工智能研究成果表明&#xff0c;更简单、更小的神经网络可以比以前更好…

python画画用哪库好_小白开始学Python最著名的绘图库

原标题&#xff1a;小白开始学Python最著名的绘图库 这是菜鸟学Python的第101篇原创文章 数据分析里面可视化是重要的环节&#xff0c;辛苦把数据采集&#xff0c;然后经历了很多工序的清洗之后&#xff0c;最后要展现给用户&#xff0c;最好的方法就是数据可视化。数据可视化是…

​2021年人工智能的四大趋势

来源&#xff1a;工信头条PART Ⅰ前沿资讯2021年人工智能的四大趋势美国《福布斯》双周刊网站刊载题为《2021年人工智能的四大趋势》的报道&#xff0c;作者系伯纳德马尔&#xff0c;文章根据当下形势&#xff0c;预测了明年人工智能的四个趋势。在2020年全球疫情暴发和世界被彻…

和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...

一.HTTP基本原理(一)URI和URLURI的全称为统一资源标志符&#xff0c;URL的全称为统一资源定位符。用来指定一个资源的访问方式&#xff0c;包括访问协议&#xff0c;访问路径和资源名称,从而找到需要的资源(网页的内容都是按照一定层次保存到网站系统的后台数据库或者文件夹内)…

计算机专业介绍范文英文,计算机专业个人简历英文范文

计算机专业个人简历英文范文2019-08-13版权声明举报文章I have the honor to present a brief introduction of myself to you in compliance with the requirements of your graduate admission I was born in November 7th, 1966, at the town of Changing, Beijing. My pare…

【Linux】使用ZStack私有云创建本地Linux服务器

1、运维配置了一台Linux的主机&#xff0c;然后安装了ZStack&#xff0c;前面这部分操作运维处理了。 2、首先打开Zstack的网址地址&#xff0c;一般是一个IP地址&#xff08;此时不写&#xff09; 3、然后进入页面后&#xff0c;默认进入首页&#xff0c;此时可以按照流程逐次…

信息科学部鼓励科学家更多瞄准“原创”研究

来源&#xff1a;《中国科学报》 (2020-09-28 第4版 自然科学基金)信息科学是研究信号/信息的产生、获取、传输、处理、存储、显示和应用及其相互关系的科学。在引导申请人进行分类申请方面&#xff0c;信息科学部认真落实四类科学问题属性资助导向的科学基金改革任务。2020年&…

未来的计算机作文100,未来的自己作文100字

未来的自己作文100字未来的我&#xff0c;将会是一名医生&#xff0c;我会让全世界的病人都康复起来&#xff0c;不再受病魔的折磨。下面由小编为您整理出的未来的自己作文&#xff0c;一起来看看吧。未来的自己作文1未来的我&#xff0c;将会是一名医生&#xff0c;我会让全世…

深度解析:特斯拉的工厂为什么建造得这么快?

内容来源&#xff1a;The BIM编辑&#xff1a;小艾 从建厂到投产到量产&#xff0c;特斯拉上海超级工厂只用了不到一年时间。特斯拉电动汽车市场占有率一直在上升&#xff0c;并因此扩大生产规模&#xff0c;以惊人的速度建立了多个超级工厂。内华达、纽约、德州、上海、柏林等…

html控制图的宽,用JointJS做一个简单的功能控制图

继上一篇介绍了GoJS之后&#xff0c;继续研究JS的绘图工具&#xff0c;毕竟GoJS有些小贵。这次选择了JointJS&#xff0c;完全开源&#xff0c;它还有一个商业版本叫Raddit&#xff0c;功能更强大。不过就我的需求场景&#xff0c;开源的Joint就足够了。接下来&#xff0c;我们…

kax格式怎么导入不了pr_pr如何导入.mogrt文件 pr模板导入教程

Mogrt 文件是什么&#xff0c;Mogrt格式的模板文件&#xff0c;又称之为Pr动态图形模板&#xff0c;是一种新型的模板格式。.mogrt文件如何使用&#xff0c;pr如何导入.mogrt文件呢&#xff1f;Macw小编为大家带来了pr模板导入教程&#xff0c;一起来看看吧&#xff01;pr如何导…

《科学》:作弊者并非赢家,合作的物种表现得更好

本文系生物谷原创编译&#xff0c;欢迎分享&#xff0c;转载须授权&#xff01;健康的人际关系的标志是你付出多少&#xff0c;得到多少。自然界有它自己的健康关系。互利共生&#xff08;mutualism&#xff09;是指物种之间的相互作用&#xff0c;对每个物种都有利。一个例子是…

plt.savefig 不保存边框_Matlab科研绘图 amp; 保存

为方便自己绘图&#xff0c;记录一下画图常用命令。会不定期完善代码&#xff0c;欢迎评论区交流好用的画图技巧。部分绘图效果展示绘图代码详解以随机噪声为例x代码绘图结果&#xff1a;保存图片方式①复制无损矢量图&#xff1a;在figure中使用菜单edit---->copy figure&a…

servlet源码查看

1&#xff0c;下载源码&#xff0c;点击此处可下载 2&#xff0c;创建web项目 我这里以jdbc这个web项目为例讲解 在javaee libraries中有个javaee.jar包&#xff0c;选中它-->右击--》Properties 找到你下载的jar包 打开---apply 即可】 在任意一个.java文件中&#xff0c;…