当前位置: 首页 > 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] 是否为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
http://www.lryc.cn/news/376289.html

相关文章:

  • 联邦学习周记|第四周
  • 机器学习课程复习——逻辑回归
  • Rocky Linux 更换CN镜像地址
  • Linux rm命令由于要删的文件太多报-bash: /usr/bin/rm:参数列表过长,无法删除的解决办法
  • 【包管理】Node.JS与Ptyhon安装
  • SpringMVC系列四: Rest-优雅的url请求风格
  • Hexo 搭建个人博客(ubuntu20.04)
  • 【论文阅读】-- Attribute-Aware RBFs:使用 RT Core 范围查询交互式可视化时间序列颗粒体积
  • A类IP介绍
  • HTML5基本语法
  • 正则表达式常用表示
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】007 - evb-rk3568_defconfig 配置编译全过程
  • 11.1 Go 标准库的组成
  • 【UG\NX二次开发】UF 调用Grip例子(实现Grip调用目标dll)(UF_call_grip)
  • [算法刷题积累] 两数之和以及进阶引用
  • pytest+parametrize+yaml实例
  • 【HarmonyOS】鸿蒙应用模块化实现
  • 深入Node.js:实现网易云音乐数据自动化抓取
  • 【Docker实战】jenkins卡在编译Dockerfile的问题
  • rust 多线程分发数据
  • CentOS 7x 使用Docker 安装oracle11g完整方法
  • DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)
  • Shellcode详解
  • sherpa-onnx说话人识别+语音识别自动开启(VAD)+语音识别Python API
  • 提取人脸——OpenCV
  • python数据可视化:在图形中添加注释matplotlib.pyplot.annotate()
  • IDEA debug 调试Evaluate Expression应用
  • 04-echarts-立体柱状图扩展
  • HTML5 Web Workers: 异步编程的强大力量
  • Flutter第十二弹 Flutter多平台运行