day57|动态规划17-最长回文子串问题

news2025/2/23 15:02:12

回文子串:强调连续
回文子序列:不强调连续

647. 回文子串的个数

在这里插入图片描述

  • 暴力思路:三层for循环
  • 双指针思路:
  • 动态规划
  • dp数组
  1. dp[i][j]: 根据字符串的形式和所解决的问题确定dp数组的形式和含义。
    在这里插入图片描述
  2. 递归公式(分情况讨论)
    2.1 如果 ij
    2.2 如果 j-i
    1
    2.3 如果 j-i>1: 此时依赖于dp[i+1][j-1]是不是一个回文子串,当dp[i+1][j-1]为一个回文子串时,那么外层也就是一个回文子串。外层利用result记录回文子串的个数。
  3. 初始化:默认都不是回文子串
  4. 遍历顺序: 从底往上,从左到右进行遍历(再确定遍历顺序的时候,一定要搞清楚后一个状态与前一个状态的以来依赖关系,依赖关系决定了元素的遍历顺序。并且要控制j应该是大于等于i的。
  5. 输出结果在这里插入图片描述
class Solution:
    def countSubstrings(self, s: str) -> int:
    	# dp[i][j]表示字符串i-j之间的字符串是否为回文子串
        s = list(s)
        row,col = len(s),len(s)
        dp = [[False]*col for _ in range(row)]
        result = 0
        for i in range(row-1,-1,-1):
            # j的取值一定是大于或者等于i的所以在第2个循环中需要初始化j的取值为i
            for j in range(i,col):
                if s[i] == s[j]:
                    if j-i<=1: dp[i][j] = True
                    else: dp[i][j] = dp[i+1][j-1]
                    if dp[i][j] : result += 1
        return result    

516.最长回文子序列

元素不连续应该怎么分析呢?

  1. dp[i][j] 表示i-j这个范围内的回文子序列的长度
  2. 递推公式: 如何得到i-j之间的回文子序列的长度,还是先比较s[i]和s[j]是否相同。
    2.1 如果s[i]==s[j] 那么最长回文子序列的长度取决于内部的情况dp[i+1][j-1]+2
    2.2 如果s[i]!=s[j] 那么可以分为两种分别考虑s[i]和s[j]的情况,因为考虑的是最长回文子序列,所以取max即可。
  3. 初始化: dp[i][i]=1,在相同的子串时的状态应该初始化为1
  4. 遍历顺序: 从下向上进行遍历
  5. 打印dp数组在这里插入图片描述
class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        # dp表示i-j之间的最大回文子串有多少个
        s = list(s)
        row,col = len(s),len(s)
        dp = [[0]*row for _ in range(col)]
        for i in range(row):
            dp[i][i] = 1
        for i in range(row-1,-1,-1):
            for j in range(i+1,col,1):
                if s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1] + 2
                else:
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1])
        # 最后一个状态的元素是[0][-1]
        return dp[0][-1]

动态规划总结篇

1 背包问题

在这里插入图片描述

2 打家劫舍

3 股票问题

在这里插入图片描述

4 子序列问题

在这里插入图片描述

动态规划

图片来自于代码随想录
在这里插入图片描述

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

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

相关文章

B046-cms01-后台搭建 界面修改 分页 GirdManager

目录 cms项目介绍Maven跳转到后台首页视图解析器页面和静态资源准备资源分布controller控制器 跳转到文章展示页面index.JSPArticleControllerarticle.jsp gridManager初体验和显示文章数据时间和是否启用显示Articlearticle.jsp 展示文章类型ArticleServiceImplarticle.jsp 按…

短视频seo源码部署--LINUX环境

抖音矩阵系统源码/抖音seo矩阵系统/抖音账号矩阵源码/短视频seo源码部署 *基于PHP语言&#xff0c;linux环境&#xff0c;MVC框架进行研发&#xff0c;开源部署 开源性质使得用户可以根据自己的需求对其进行二次开发和定制。然而&#xff0c;对于该软件的部署却是一项非常关键…

Python异步编程之web框架 异步vs同步 Redis并发对比

1|0测试基本信息 主题&#xff1a;比较异步框架和同步框架在RedisIO操作的性能差异python版本&#xff1a;python 3.8数据库&#xff1a;redis 5.0.7压测工具&#xff1a;locustweb框架&#xff1a;同步&#xff1a;flask 异步&#xff1a;starlette请求并发量: 模拟10个用户服…

ubuntu下,安装配置CUDA

一、下载文件。 到下面的官网链接&#xff0c;下载你自己需要的版本。我喜欢11.7 CUDA Toolkit Archive | NVIDIA Developer 二、安装 可能的错误&#xff1a; Failed to verify gcc version. --Linux安装CUDA GCC版本不兼容 sudo sh cuda_xxxxxxxxxxxxxx_linux.run --overr…

【vue+websocket】vue本地链接websocket正常,线上部署websocket 无法加载响应数据【已解决】

1.nginx配置&#xff0c;进行反向代理 location /链接websocket的名称 {proxy_pass http://localhost:websocket端口号/链接websocket的名称;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade"; }2.开放websoc…

Ansible源码学习(一)

一、背景说明 基于Ansible1.1源码学习 二、目录结构 ansible核心目录 ansible ├─bin # 入口命令 │ ├─ansible │ ├─ansible-doc │ ├─ansible-playbook │ ├─ansible-pull ├─lib # 核心代码 │ └─ansible │ ├─callback_plugins …

Netty核心技术六--Netty核心模块组件

1. Bootstrap、ServerBootstrap Bootstrap 意思是引导&#xff0c;一个 Netty 应用通常由一个Bootstrap 开始&#xff0c;主要作用是配置整个 Netty 程序&#xff0c;串联各个组件&#xff0c;Netty 中 Bootstrap 类是客户端程序的启动引导类&#xff0c;ServerBootstrap 是服…

【Linux】天天直接IO?我说停停,不如试试文件缓冲区

系列文章 收录于【Linux】文件系统 专栏 关于文件描述符与文件重定向的相关内容可以移步 文件描述符与重定向操作。 可以到 浅谈文件原理与操作 了解文件操作的系统接口。 目录 系列文章 揭秘C库文件结构体 文件缓冲区 为什么需要文件缓冲区 刷新机制 内核文件缓冲区…

java基础(多线程)-共享资源并发问题以及synchronized解决方案

一、共享资源带来的问题 class ThreadProblem{static int counter 0;public static void testThread(){Thread t1 new Thread(()-> {for (int i 0; i < 5000; i) {counter;}},"t1");Thread t2 new Thread(()-> {for (int i 0; i < 5000; i) {count…

【VMD-LSTM】变分模态分解-长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

主动降噪技术的运用及其展望---【其利天下技术】

降噪耳机想必大家是听说过的&#xff0c;那么什么是降噪耳机呢&#xff1f;降噪耳机的降噪是如何实现的呢&#xff1f; 在很多年前&#xff0c;我想大家肯定认为降噪耳机不就是做得比较帖耳&#xff0c;尽量把声波能量隔离不让进入人耳吗&#xff1f;搞得这么神秘干吗呢&#…

猿辅导基于 EMR StarRocks 的 OLAP 演进之路

摘要&#xff1a;猿辅导大数据平台团队负责人申阳分享了猿辅导基于 StarRocks 的 OLAP 演进之路。主要包括以下几大部分&#xff1a; 数据需求产生OLAP 选型StarRocks 的优势业务场景和技术方案基础建设 Tips&#xff1a;点击「阅读原文」查看原文视频 1► 数据需求产生 猿辅导…

【Linux】进程间通信(1)——匿名管道

文章目录 前言进程间通信的目的进程间通信的发展进程间通信分类管道什么是管道&#xff1f;站在内核角度-管道本质匿名管道pipe函数管道的特点&#xff08;重要&#xff09;用fork来共享管道原理匿名管道的使用步骤管道的读写规则管道的四种场景 如何使用管道进行进程间通信&am…

【Vue3学习】Vuex 状态管理 store

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 安装 npm npm install vuexnext --saveyarn npm install vuexnext --save基本使用 1&#xff09;创建…

Kubernetes初认识

系列文章目录 文章目录 系列文章目录一、Kubernetes初认识1.k8s的特性2.K8S架构3.Kubernetes工作流程 二、K8S创建Pod流程1.详细版2.简单版 总结 一、Kubernetes初认识 1.k8s的特性 弹性伸缩&#xff1a;使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例&…

磁盘调度算法及其应用

导读&#xff1a; 磁盘调度是计算机系统中的重要问题之一。在多个进程同时访问磁盘时&#xff0c;合理的磁盘调度算法可以优化磁盘访问顺序&#xff0c;提高系统性能。本文将介绍磁盘调度算法的基本思想&#xff0c;并通过一个实验来模拟不同调度算法的运行过程。 正文&#…

如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍

背景 近期在搭建英文博客-<e-whisper.com>, 需要对现有的所有中文 Markdown 翻译为英文。 需求如下&#xff1a; 将 Markdown 文件从中文 (zh-CN) 翻译为英文 (en)翻译后要保留 Markdown 的完整格式部分 Markdown block 不需要翻译&#xff0c;如&#xff1a;front-ma…

电脑蓝屏问题

如何使用DISM命令行工具修复Windows 10映像 - 系统极客 (sysgeek.cn) 电脑每周基本都会出现一次蓝屏问题&#xff1a;THREAD_STUCK_IN_DEVICE_DRIVER 售后重装系统&#xff0c;换主板&#xff0c;换硬盘都没有用&#xff0c;实在是人麻了 不知道有没有用&#xff0c;先记录一…

“边玩边赚”的区块链游戏发展前景和趋势

2008年&#xff0c;一个真实的故事。 大学期间&#xff0c;睡在我下铺的兄弟没日没夜地玩一款电脑游戏——《热血江湖》&#xff0c;期末考试和考研都没能阻止他。而最终&#xff0c;是游戏里的一把枪让他改邪归正。因为他把那件装备卖给了一个北京人&#xff0c;价格高达3000…

IT专业相关介绍【活动】

IT专业相关介绍【活动】 前言IT专业相关介绍一、IT专业的就业前景和发展趋势二、了解IT专业的分类和方向三、你对本专业的看法和感想四、本专业对人能力素养的要求五、建议和思考六、计算机思维能力测试 最后 前言 2023-6-17 10:00:29 以下内容源自《【活动】》 仅供学习交流…