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

【LeetCode 5.】 最长回文子串

一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到?如果显然具备这个特性,那么就应该朝动态规划思考。如果令dp[i][j]表示串s[i:j+1]是否是回文子串,那么判断dp[i][j] 是否是回文子串,相当于判断s[i] 与 s[j] 是否相等 + dp[i+1][j-1] 是否相等。

1. 题目

2. 分析

这道题我写了一个小时才写出来,相比之前看答案写题是有进步的。估计这道题我这半个月都不会忘记了。一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到?如果显然具备这个特性,那么就应该朝动态规划思考。

具体看一个样例:s="babad",判断这个字符串是否是最长回文子串,相当于判断aba是否是回文子串和b与d是否相等。

01234
babad

相当于判断最后一个字符和要判断子串的第一个字符是否相等,外加判断内部子串是否是回文子串。

123
aba

那么抽象一下,就可以得出:判断dp[i][j] 是否是回文子串,相当于判断s[i] 与 s[j] 是否相当 + dp[i+1][j-1] 是否相等。

3. 代码

class Solution:def longestPalindrome(self, s: str) -> str:dp = [[0] * len(s) for i in range(len(s))]for cur_length in range(1, len(s)+1):for i in range(0, len(s)):j = i + cur_length - 1 # 终点下标if j >= len(s): # 越界处理continueif j == i:dp[i][j] = 1continueif cur_length == 2: # 长度为2的区间if s[j] == s[i]:dp[i][j] = 1continueif s[j] == s[i] and dp[i+1][j-1]: # 如果起点和终点相同dp[i][j] = 1# print(dp)max_len = 0res = ""for i in range(len(s)):for j in range(len(s)):if dp[i][j] == 1:if j-i+1 > max_len:max_len = max(max_len, j-i+1)res = s[i:j+1]return res

相关文章:

  • 主窗体设计
  • 2023年的Top20 AI应用在近一年表现怎么样?
  • Postman如何做接口测试:什么?postman 还可以做压力测试?
  • Windows 服务器Nginx 下载、部署、配置流程(图文教程)
  • 一次基于 rebase 的 PR 提交
  • MEMS:Lecture 18 Feedback
  • 【Linux】基础IO [万字之作]
  • tcp和udp的例子
  • 用Copilot画漫画,Luma AI生成视频:解锁创意新玩法
  • 享元和代理模式
  • 反射,枚举以及lambda表达式
  • Spring 整合 MyBatis 底层源码解析
  • 条件语句与循环结构
  • PyFlink
  • 探索乡村振兴新模式:发挥科技创新在乡村振兴中的引领作用,构建智慧农业体系,助力美丽乡村建设
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • C++入门教程(10):for 语句
  • express + mock 让前后台并行开发
  • gops —— Go 程序诊断分析工具
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • java 多线程基础, 我觉得还是有必要看看的
  • Javascript设计模式学习之Observer(观察者)模式
  • Laravel5.4 Queues队列学习
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux各目录及每个目录的详细介绍
  • Mysql数据库的条件查询语句
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • overflow: hidden IE7无效
  • PHP 7 修改了什么呢 -- 2
  • Python socket服务器端、客户端传送信息
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React Native移动开发实战-3-实现页面间的数据传递
  • React Transition Group -- Transition 组件
  • React-flux杂记
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Spark RDD学习: aggregate函数
  • 对象管理器(defineProperty)学习笔记
  • 分享一份非常强势的Android面试题
  • 批量截取pdf文件
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 驱动程序原理
  • 突破自己的技术思维
  • 王永庆:技术创新改变教育未来
  • 学习笔记:对象,原型和继承(1)
  • 用Canvas画一棵二叉树
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 怎样选择前端框架
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #1015 : KMP算法
  • #HarmonyOS:Web组件的使用
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (9)STL算法之逆转旋转