怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(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,一经查实,立即删除!

相关文章

html 点击div 改变高度,HTML / CSS将div设置为同级的高度

我有三分之二的div。所包含的div之一向左浮动&#xff0c;另一个向右浮动。我希望2个同级div始终处于相同的高度&#xff0c;但是对此存在问题。到目前为止&#xff0c;我只在Firefox中查看该页面&#xff0c;并认为在至少一个浏览器中运行它后&#xff0c;我会担心任何跨浏览器…

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

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

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

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

计算机组装与维修案例分析,设备故障维修案例分析三则

设备故障维修案例分析三则本文列举较具有代表性的故障维修的三个案例,以此阐述在医疗设备维修中对各方面知识综合运用的能力以及对设备故障诊断分析过(本文共2页)阅读全文>>针对通信设备故障维修领域知识表示规范性差、结构性不强、案例利用率低等问题,结合设备维修案例知…

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

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

web.xml配置解释

<?xml version"1.0" encoding"UTF-8"?><web-app version"3.1" xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org…

美军军事通信系统简史

来源&#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编程思想》…

BZOJ2330 SCOI2011糖果

复习了一波差分约束。 http://blog.csdn.net/my_sunshine26/article/details/72849441 构图方式记住就好。 本题要倒序插入否则会被卡。 1 #include<bits/stdc.h>2 using namespace std;3 const int N1e510;4 struct node{5 int to,nex,w;6 }e[N<<2];7 int hea…

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

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

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

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

犯罪团伙

1 、犯罪团伙gang.cpp警察抓到了 n 个罪犯&#xff0c;警察根据经验知道他们属于不同的犯罪团伙&#xff0c;却不能判断有多少个团伙&#xff0c;但通过警察的审讯&#xff0c;知道其中的一些罪犯之间相互认识&#xff0c;已知同一犯罪团伙的成员之间直接或间接认识。有可能一…

计算机类对口升学都可以升啥专业,计算机专业对口升学专业试题.doc

计算机专业对口升学专业试题2010年对口升学班计算机专业期末考试专业试卷姓名第一部分:C语言部分(总分130分)一、选择题&#xff1a;(十小题&#xff0c;每题3分)1、C语言规定&#xff1a;在一个源程序中&#xff0c;main( )函数的位置( )A必须在最前面   B必须在系统调用的…

​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年&…

用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

一个简单的学生信息管理系统基于python和tkinter 1。需求分析1。大学生信息管理系统使用tkinter接口创建一个窗口。使界面更漂亮。2. 实现与数据库的连接,教师和学生的信息可以保存或读取,可以通过访问数据库和基本信息。3.的功能添加、删除、搜索和修改学生数据。2. 功能设计和…