代码随想录算法训练营Day57|LC647 回文子串LC516 最长回文子序列

一句话总结:最关键的是dp数组的定义。

 

原题链接:647 回文子串

按动规五部曲一步步进行分析:

  1. dp数组及其下标的定义:首先需要确定为二维数组,其中dp[i][j]表示区间[i, j]之中的子串是否为回文子串;
  2. 状态转移方程:如果s[i] == s[j],那么区间[i, j]之中的子串是否为回文子串还依赖于[i + 1, j - 1]之间的状态是否为true,即有 if (s[i] == s[j] && (dp[i + 1][j -1] || j - i <= 1)) {dp[i][j] = true;};如果s[i] != s[j],那么肯定dp[i][j]肯定就是false了;
  3. 状态方程的初始化:很明显对于每个单个的字符都是一个回文串,因此有dp[i][i] = true;
  4. 方程的遍历顺序:从状态转移方程可以看出,dp[i][j]的计算依赖于dp[i + 1][j - 1],因此对i的遍历需要从后往前,对j的计算需要从前往后;
  5. 举例推导dp数组。

最终代码如下:

class Solution {public int countSubstrings(String s) {int n = s.length();char[] cs = s.toCharArray();boolean[][] dp = new boolean[n][n];int ans = 0;for (int i = n - 1; i >= 0; --i) {for (int j = i; j < n; ++j) {if (cs[i] == cs[j] && (j - i <= 1 || dp[i + 1][j - 1])) {++ans;dp[i][j] = true;} }}return ans;}
}

 

原题链接:516 最长回文子序列

 

dp五部曲分析如下:

  1. dp数组及其下标的确定:dp[i][j]表示区间[i, j]之中的最长回文子序列的长度;
  2. 状态转移方程的推导:当s[i] == s[j]时,有dp[i][j] = dp[i + 1][j - 1] + 2;当s[i] != s[j]时,则有dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]);
  3.  类似于上题,dp[i][i] = 1;
  4. 类似于上题,i的遍历从后往前,j的遍历从前往后(由i开始);
  5. 举例推导dp数组:略。

最终代码如下:

class Solution {public int longestPalindromeSubseq(String s) {int n = s.length();char[] cs = s.toCharArray();int[][] dp = new int[n][n];for (int i = 0; i < n; ++i) dp[i][i] = 1;for (int i = n - 1; i >= 0; --i) {for (int j = i + 1; j < n; ++j) {if (cs[i] == cs[j]) dp[i][j] = dp[i + 1][j - 1] + 2;else dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]);}}return dp[0][n - 1];}
}

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

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

相关文章

模仿银行系统的极简Java三层结构应用——转账功能的实现

我们今天来给系统加上转账功能。转账功能说白了就是给两个账户同时存取款&#xff0c;相对于存取款就多了一个账户的比对。 首先&#xff0c;用户表现层&#xff1a; 是用户表现界面要添加一条转账功能的提示&#xff1a; 这没什么说的&#xff0c;下面就是在switch里写相应的…

浏览器工作原理与实践--HTTPS:让数据传输更安全

浏览器安全主要划分为三大块内容&#xff1a;页面安全、系统安全和网络安全。前面我们用四篇文章介绍了页面安全和系统安全&#xff0c;也聊了浏览器和Web开发者是如何应对各种类型的攻击&#xff0c;本文是我们专栏的最后一篇&#xff0c;我们就接着来聊聊网络安全协议HTTPS。…

如何把npm切换成yarn管理项目

1.删掉项目中package-lock.json和依赖包 这一步手动删掉就好 2.全局安装yarn npm install -g yarn 3.可以开始执行yarn install安装依赖 1&#xff09;执行yarn init 这一步是修改npm生成的package.json文件&#xff0c;可能会遇到这个问题&#xff1a; 这个查了一下是有…

Zabbix6.0监控入门

1. Zabbix 监控系统入门简介 Zabbix 是一个基于 WEB 界面的提供分布式系统监控的企业级的开源解决方案&#xff0c;Zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全稳定的运行&#xff0c;并提供灵活的通知机制以让 SA 快速定位并解决存在的各种问题。Zabbix 分布式…

[openGL] 高级光照-Gamma矫正

目录 一 Gamma是什么? 二 感知光度和物理光度 2.1 与Gamma的关系 2.3 存在问题和弊端? 三 Gamma矫正(逆Gamma) 3.1 Gamma矫正的两种方法 3.2 sRGB空间 3.3 重复校正 3.3.1 在着色器中处理重复校正 3.3.2 在加载纹理时就重复校正 3.3.3 校正前后效果 本章节Qt源码点…

第3关 - GoC模拟题3

GoC测试模拟题(2017.4.18)第1题&#xff1a;棱形(lx) 题目描述 棱形是四条边相等的四边形&#xff0c;但角度不确定。请编程画出如下图的边长为50&#xff0c;内角分别是45度和135度的棱形。 说明&#xff1a; 上图中红色数字是标明尺寸的&#xff0c;不需要画出。 输入格式…

SAM2695 法国追梦DREAM 音频DSP芯片

法国追梦/DERAM SAM5504/5704/5716/5808音频DSP芯片,开发板&#xff0c;方案 可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 提供服务 全系列芯片&#xff1a; SAM2634 SAM2695 SAM5504B SAM5704B SAM5708B SAM5808B SAM5716B SAM5916B…

软考中级哪个科目适合前端报考?

软考中级有15个科目&#xff0c;有5个专业方向&#xff0c;分别是&#xff1a;计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。 如果大家在做前端的话&#xff0c;比较适合报考的科目是软件设计师。它涉及的内容包括软件工程、数据结构、操作系统等&#xff0c…

2024年五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

【Vue3】ref基本类型的响应式数据

文章目录 ref简介 ref简介 vue3是使用proxy代理&#xff0c;让数据变成响应式数据。反观&#xff0c;vue2是使用数据劫持&#xff0c;使数据达到响应式。作用: 定义响应式变量用法: let xx ref(初始值)返回值: 一个RefImpl的实例对象&#xff0c;简称ref对象&#xff0c;ref对…

GPT国内能用吗

2022年11月&#xff0c;Open AI发布ChatGPT&#xff0c;ChatGPT展现了大型语模型在自然语言处理方面的惊人进步&#xff0c;其生成文本的流畅度和连贯性令人印象深刻&#xff0c;为AI应用打开了新的可能性。 ChatGPT的出现推动了AI技术在各个领域的应用&#xff0c;例如&#x…

docker初始化进程

docker run --init 是一个 Docker 命令的选项&#xff0c;用于在容器中运行一个初始化进程&#xff08;通常是 tini&#xff09;。这个初始化进程负责处理一些 Unix 信号&#xff08;如 SIGTERM 和 SIGCHLD&#xff09;&#xff0c;并确保容器中的进程能够正确地被管理和清理。…

postman汉化

一、postman历史版本下载&#xff1a;Postman 10.24.16 Download for Windows / Old Versions / FileHorse.comhttps://www.filehorse.com/download-postman/old-versions/ 二、汉化包下载&#xff1a; Releases hlmd/Postman-cn GitHubPostman汉化中文版. Contribute to h…

ubuntu22.04 安装并使用 DirBuster

DirBuster是一个用于对Web应用程序进行目录和文件名枚举的工具&#xff0c;通常来说它是一个独立的Java程序&#xff0c;所以你应该看到一个.jar文件&#xff0c;而不是PHP文件。 要下载DirBuster&#xff0c;你需要访问OWASP的官方资源或者使用搜索引擎找到合适的下载链接。一…

【详细】OSPF vs RIP

目录 内部网关协议IGP 按照算法原理分 按照适用范围分 两者优缺点比较 RIP协议 RIP的两个版本区别 RIPv2认证功能 RIP协议优缺点 RIP协议路由环路发生原理及处理方式 造成路由环路的原因&#xff1a; 路由环路的危害 路由环路解决方法​编辑 OSPF协议 Router-ID&a…

分类预测 | Matlab实现SSA-LSSVM麻雀算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现SSA-LSSVM麻雀算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现SSA-LSSVM麻雀算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现SSA-LSSVM麻雀算法优化最小二乘支持向量机数据…

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现&#xff0c;创造出震撼的视觉作品。但是&#xff0c;高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源&#xff0c;有效提高了渲染的速度和效率&#xff0c;…

8.Jetson AGX Orin Ubuntu20.04 gRPC编译安装

Jetson AGX Orin Ubuntu20.04 gRPC编译安装 一、CMake版本检查 grpc编译cmake要求最低版本为3.15。首先&#xff0c;cmake -version 查看当前cmake版本&#xff0c;如果低于3.15&#xff0c;按照以下步骤进行安装。 1.1 卸载已经安装的旧版的CMake sudo apt-get autoremove…

【408直通车】C+Python赋能数据结构:从底层原理到高级应用的蜕变之路——线性表

本专栏旨在通过使用C语言和Python分别实现各种考研常见数据结构&#xff0c;从底层原理和应用两个角度深入探索数据结构。通过深入理解数据结构的底层原理和掌握Python的高级特性&#xff0c;读者将能够全面掌握数据结构的知识&#xff0c;并且学会如何在实际应用中灵活运用。 …

vue-seamless-scroll 某些点击不生效

问题描述&#xff1a; 使用了vue-seamless-scroll&#xff0c;里面嵌套了ul li &#xff0c;对li进行遍历&#xff0c;实现一个滚动列表的效果&#xff0c;对每一个li加了test点击事件&#xff0c;每次点击一行li时&#xff0c;都会触发点击事件&#xff0c;但是接口返回的前三…