5. 最长回文子串

引流:人工智能领域专栏

题目:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

【解题思路】

 不要多想,本题就用动态规划解决。既然是动态规划,那么就要考虑动态规划数组如何建立,一般我们都会建立一个二维数组用于存储动态规划的中间过程,而在这之前,要充分挖掘题目的规律。本题中,对于一个字符串,想要让它回文,无非就是镜像首尾要一样,例如aa、aba、abccba等,所以

第一步:定义一个二维dp数组,数组里初始值全为False;

第二步:数组中什么时候值为True呢?既然存在首尾相同的条件,那么就需要定义两个指针,一个指针不断像字符串后遍历,另一个指针在前一个指针所在的每一个位置前遍历,直到遍历到与前一个指针相遇;

第三步:在第二步中,每次遍历都考虑两件事,一是两个指针所指向的字符是否相同,如果相同,那么这两个字符所裹挟的字符串很有可能是回文串,具体怎么判定呢?拿`aacabaccba`来举例,如果相邻的两个字符一样,如“aa”,那它肯定是回文串,如果如果两个一样的字符不相邻但中间只裹挟一个字符,如“aca”,那它也必然是回文串,除此之外,其它的情况就不一定了;所以我们要判断的条件之一是首尾两个字符是否相同,条件之二是看相同的首尾两个字符所组成的子串长度是否小于等于3,如果是,那么就让dp数组对应的位置为True;

第四步:第三步中,如果满足条件一但不满足条件二呢?由于本题解题思路是动态规划,所以当首尾相同字符裹挟的字符不止一个时,那么只需要首尾字符同时向内缩一个再判断此时的子串是否为回文串就行了,因为此时的子串在之前的遍历中肯定是已经判断过了,如果此时的字符串为回文串,那么原首尾字符组成的子串也必然是回文串。还以`aacabaccba`举例,假设此时我们遍历到首尾字符所组成的子串为`cabac`,c和c相同,但`cabac`长度超过3,所以向内缩为`aba`,这个时候我们只需要判断`aba`是否为回文即可确定`cabac`是否为回文,而`aba`在之前肯定已经判断过了,在哪呢?就在dp数组里存着呢!所以找dp[left+1][right-1]所对应的值是不是True就行了。

综上所述,代码如下:

def longestPalindrome(self, s: str) -> str:if len(s) == 1:return sdp = [[False]*len(s) for _ in range(len(s))]start, end = 0, 0maxlength = 0for right in range(1, len(s)):for left in range(right):if s[right] == s[left] and (right-left<=2 or dp[left+1][right-1]):dp[left][right] = Trueif right - left > maxlength:maxlength = right - leftstart = leftend = rightreturn s[start:end+1]

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

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

相关文章

AIGC初探:提示工程 Prompt Engineering

简介 提升工程是什么 提示工程&#xff08;Prompt Engineering&#xff09;是人工智能领域中的一个概念&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域中。它是一种通过设计和优化输入提示来提高AI模型表现的方法。 对于基于转换器的大型语言模型&#x…

CPU平台做视频智能分析,Lnton视频分析平台不仅支持流分析,同时也支持图片分析了

LntonAIServer最新v1.0.09版本支持图片分析了&#xff0c;经过几个月的研发&#xff0c;在原有的视频流分析的基础上&#xff0c;我们终于支持大家都非常期待的图片分析功能了&#xff0c;图片分析的功能加上&#xff0c;能有利于很多场景的展开&#xff0c;比如在烟火、明厨亮…

看CHAT如何判断php Imagick writeImages写入gif已经完毕

CHAT回复&#xff1a;Imagick::writeImages() 是同步执行的&#xff0c;也就是说这个函数会阻塞直到 GIF 文件被完全写出。所以如果这个函数没有报错并成功返回&#xff0c;那么你可以认为 GIF 文件已经被完全写出了。 如果你想要在写出 GIF 文件后立即做一些操作&#xff08;例…

Linux-故障排查

实验要求 samba仅允许192.168.1.0/24、192.168.10/24进行访问 开一台虚拟机 快照恢复到未联网安装 关闭防火墙 安全linux 编辑ens33网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将ens33网卡复制一份命名为ens37 cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc…

vue中key的用法

加key是提升vue渲染效率&#xff0c;减少DOM操作。 vue列表元素的更新机制&#xff1a; 当列表元素没有设置key的时候&#xff0c;vue判断是否操作这个DOM元素&#xff0c;是根据新旧两次数据的元素顺序进行对比&#xff0c;看一下元素内容是否发生变化。发生变化vue就操作这个…

如何将ElementUI组件库中的时间控件迁移到帆软报表中

需求:需要将ElementUI组件库中的时间控件迁移到帆软报表中,具体为普通报表的参数面板中,填报报表的组件中,决策报表的组件与参数面板中。 这三个场景中分别需要用到帆软报表二开平台的ParameterWidgetOptionProvider,FormWidgetOptionProvider,CellWidgetOptionProvider开…

万界星空科技云MES,助力客户快速构建数字工厂

一、MES发展趋势 1、定制化趋势 工业2.0、3.0的技术已较为成熟&#xff0c;部分制造业水平较为发达的国家已经率先进入以网络化、智能化为代表的工业4.0发展阶段,MES作为制造业规划层随着物联网等持续发展&#xff0c;为适应定制化时代&#xff0c;整体技术模块化、服务化将重…

word2019保存后的图片变模糊了怎么办?Word 2019 默认保存后压缩变模糊的问题,解决方案

Word 2019 默认保存后压缩变模糊的问题&#xff0c;解决方案 1&#xff0c;新建word 文件&#xff0c;插入一张原始图片&#xff0c;1080*1920&#xff0c;如下图&#xff1a; 2&#xff0c;保存时&#xff0c;word 2019默认选项&#xff0c;导致word 保存后&#xff0c;图片…

1944. 队列中可以看到的人数

有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff0c;heights[i] 表示第 i 个人的高度。 一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 。更正式的&#xff0c;…

【Nessus】容器化使用Nessus网络漏洞扫描工具

Nessus是一款广泛使用的网络漏洞扫描工具&#xff0c;用于评估计算机系统、网络设备和应用程序中存在的安全漏洞。它由Tenable Network Security开发&#xff0c;并广泛用于网络安全行业。 Nessus可以扫描目标系统并提供有关潜在漏洞的详细报告&#xff0c;帮助安全人员发现和…

【Nodejs】基于express|ejs的用户博客管理系统前后端代码

目录 package.json 后端&#xff1a; server.js router/admin/index.js router/admin/login.js router/admin/blog.js router/admin/users.js router/web/index.js 前端&#xff1a; views/admin/common/top.ejs views/admin/index.ejs views/admin/login.ejs vie…

如何查找iPhone中所有的应用程序

​ ​ Apple 的 App Store 共有约 200 万个适用于 iPhone 和 iPad 的应用程序。如果您像我们一样&#xff0c;您的 iOS 或 iPadOS 设备上可能有数十个应用程序&#xff0c;但没有机会将它们全部整理好。您很容易忘记主屏幕上应用程序图标的位置。 幸运的是&#xff0c;iPhone…