代码随想录算法训练营第四十九天| 647. 回文子串、 516.最长回文子序列

647. 回文子串

在这里插入图片描述

题目链接:647. 回文子串
文档讲解:代码随想录
状态:不会

思路:
dp[i][j] 表示字符串 s 从索引 i 到索引 j 这一段子串是否为回文子串。
当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。

当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况:
情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串
情况二:下标i 与 j相差为1,例如aa,也是回文子串
情况三:下标:i 与 j相差大于1的时候,例如cabac,此时s[i]与s[j]已经相同了,我们看i到j区间是不是回文子串就看aba是不是回文就可以了,那么aba的区间就是 i+1 与 j-1区间,这个区间是不是回文就看dp[i + 1][j - 1]是否为true。

dp[i + 1][j - 1]和dp[i][j]关系:
字符串中s[i,j]就是在s[i-1][j+1]的基础上两端分别加上了一个字符,
因为chars[i] == chars[j],所以只要dp[i + 1][j - 1]为true,dp[i][j]必定为true

遍历顺序:
可以发现dp[i][j]是从左下方往右上方推导过来的,所以i往上,j往右

题解:

    public int countSubstrings(String s) {// 将字符串转换为字符数组char[] chars = s.toCharArray();// 获取字符串的长度int n = s.length();// 创建一个二维数组 dp,用于存储子串是否为回文// dp[i][j] 表示字符串 s 从索引 i 到索引 j 这一段子串是否为回文子串boolean[][] dp = new boolean[n][n];// 计数器,用于统计回文子串的数量int count = 0;//根据状态转移方程可以发现dp[i][j]是从左下方往右上方推导过来的,所以i往上,j往右// 从后向前遍历字符串的字符for (int i = n - 1; i >= 0; i--) {// 从当前字符向后遍历剩余字符for (int j = i; j < n; j++) {// 如果字符 i 和字符 j 相等if (chars[i] == chars[j]) {// 如果 i 和 j 之间的距离小于等于1(即相邻或同一字符),或者子串 i+1 到 j-1 也是回文// dp[i + 1][j - 1]和dp[i][j]关系:// 字符串中s[i,j]就是在s[i-1],j+1]的基础上两端分别加上了一个字符,// 因为chars[i] == chars[j],所以只要dp[i + 1][j - 1]为true,dp[i][j]必定为trueif (j - i <= 1||dp[i + 1][j - 1]) {// 标记 dp[i][j] 为 true,表示该子串是回文dp[i][j] = true;// 回文子串计数器加1count++;}}}}// 返回回文子串的总数return count;}
}

516.最长回文子序列

题目链接:516.最长回文子序列
文档讲解:代码随想录
状态:不会

思路:
dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]

因为遍历的时候i是从下往上,j是从左往右,所以字符串中s[i,j]就是在s[i-1,j+1]的基础上两端分别加上了一个字符。

如果s[i]与s[j]相同,那么显然dp[i][j] = dp[i + 1][j - 1] + 2;
如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。
加入s[j]的回文子序列长度为dp[i + 1][j]。
加入s[i]的回文子序列长度为dp[i][j - 1]。
那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);

题解:

public int longestPalindromeSubseq(String s) {int len = s.length();char[] chars = s.toCharArray();int[][] dp = new int[len][len]; // 初始化 dp 数组,dp[i][j] 表示 s[i...j] 的最长回文子序列长度// 从后往前遍历 i,以保证所有可能的子问题都被考虑到for (int i = len - 1; i >= 0; i--) {dp[i][i] = 1; // 单个字符的最长回文子序列长度为 1// 从 i+1 开始遍历 j,确保 j > ifor (int j = i + 1; j < len; j++) {if (chars[i] == chars[j]) {// 当 chars[i] 和 chars[j] 相同时,dp[i][j] 可以从 dp[i+1][j-1] 推导过来,再加上 i 和 j 这两个字符dp[i][j] = dp[i + 1][j - 1] + 2;} else {// 当 chars[i] 和 chars[j] 不相同时,dp[i][j] 取决于 dp[i+1][j] 和 dp[i][j-1] 中的较大值dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);}}}// dp[0][len-1] 表示整个字符串 s 的最长回文子序列长度return dp[0][len - 1];
}

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

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

相关文章

构建与操作共享栈

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝既然选择了远方,当不负青春,砥砺前行! 共享栈是一种优化的栈实现方式,它允许两个或多个栈共享同一段连续的内存空间…

数据结构——Trie

题目&#xff1a; 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#x1d465;&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N&#x1d441; 个操作&#xff0c;所有输入的字符串总长度不超过 10^5&#xff0c;字符串仅…

【onnx】onnxruntime-gpu无法使用问题

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 onnxruntime-gpu无法使用 1. 正文 CUDA版本&#xff1a;12.1 nvcc -VCUDNN的版本 cat /usr/include/cudnn_version.h |grep CUDNN_MAJOR -A 2说明: 可…

【数据结构——链表的深度探索】从实现到应用,保姆级攻略

【数据结构——链表深度探索】从实现到应用&#xff0c;保姆级攻略 &#x1f341;1. 链表的介绍&#x1f341;2. 链表的实现&#x1f341;2.1 单向链表&#x1f341;2.1.1 size()&#x1f341;2.1.2 display()&#x1f341;2.1.3 contains(int key)&#x1f341;2.1.4 addFirst…

墨西哥:海外新闻稿媒体分发-海外pr发稿干货分享-大舍传媒

大舍传媒&#xff1a;海外新闻稿媒体分发平台 墨西哥观查者 (mexicoviewer) 墨西哥观查者是墨西哥一家知名的新闻媒体平台&#xff0c;该平台专注于报道墨西哥国内外的时事新闻、政治、经济、文化等多个领域的内容。其更新速度快&#xff0c;报道对象广泛&#xff0c;深受墨西…

开始性能测试之前的准备工作!

性能测试是软件测试中不可或缺的一部分&#xff0c;它可以帮助我们评估软件系统的性能表现&#xff0c;并找出潜在的性能瓶颈。在进行性能测试之前&#xff0c;需要做好充分的准备工作&#xff0c;以确保测试的有效性和准确性。 1. 确定性能测试的目标和范围 * 明确测试目标:性…

《数据库原理》SQLServer期末复习_题型+考点

目录 题型&#xff1a; 一. 概况分析题&#xff08;5小题&#xff0c;每小题2分&#xff0c;共10分&#xff09; 二. 计算题&#xff08;3小题&#xff0c;每小题5分&#xff0c;共15分&#xff09; 三. 数据库设计&#xff08;2小题&#xff0c;每小题10分&#xff0c;共2…

在mysql中delete和truncated的相同点和区别点

相同点 删除数据&#xff1a;两者都会删除表中的数据。影响数据&#xff1a;两者都不删除表结构&#xff0c;只影响表中的数据。 区别点 操作方式&#xff1a; DELETE&#xff1a;逐行删除数据&#xff0c;可以使用 WHERE 子句来指定删除的条件。如果不加 WHERE 子句&#…

【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征&#xff0c;而不是舍弃那些认为不重要的特征&#xff0c;最常见的一种做法就是使用词频-逆向文档频率&#xff08;tf-idf&#xff09;。这一方法对某个特定文档中经常出现的术语给与很高的权重&#xff0c;但是堆在语料库的许多文档…

作业/数据结构/2023/7/10

1.实现单向链表队列的&#xff0c;创建&#xff0c;入队&#xff0c;出队&#xff0c;遍历&#xff0c;长度&#xff0c;销毁。 main.c #include "head.h"int main(int argc, const char *argv[]) {//创建链式队列queue_ptr QLcreate_queue();//入栈push(QL, 1000)…

imx6ull/linux应用编程学习(16)emqx ,mqtt创建连接mqtt.fx

在很多项目中都需要自己的私人服务器&#xff0c;以保证数据的隐私性&#xff0c;这里我用的是emqx。 1.进入emqx官网 EMQX&#xff1a;用于物联网、车联网和工业物联网的企业级 MQTT 平台 点击试用cloud 申请成功后可得&#xff1a;&#xff08;右边的忽略&#xff09; 进入…

告别PS,ChatGPT图片局部修改,手把手教你成为画图高手

大家好&#xff0c;我是YUAN&#xff01; 今天&#xff0c;我要向大家介绍一个能够点燃创意火花的画图设计神器——DALLE编辑器。让艺术创作&#xff0c;尤其是画图变得更加简单、直观&#xff0c;甚至可以说是革命性的。 DALLE是什么&#xff1f; DALLE编辑器的问世&#xf…

macOS系统下载navicat安装包

链接: https://pan.baidu.com/s/1SqTIXNL-B8ZMJxIBu1DfIw?pwdc1z8 提取码: c1z8 安装后效果

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件&#xff1a;中断处理流程和用途&#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构 中断系统 中断触发条件&#xff1a; 对外部中断来说&#xff0c;可以是引脚发生了电平跳变 对定时器来说&#xff0c;可以是定时的…

《算法笔记》总结No.6——贪心

一.简单贪心 贪心法是求解一类最优化问题的方法&#xff0c;它总是考虑在当前状态下局部最优(或较优)之后&#xff0c;来使全局的结果达到最优(或较优)的策略。显然&#xff0c;如果采取较优而非最优的策略(最优策略可能不存在或是不易想到)&#xff0c;得到的全局结果也无法是…

【深入理解JVM】关于Object o = new Object()

1. 解释一下对象的创建过程 “半初始化”状态通常指的是对象在内存分配后、但在完全初始化之前的一种状态。在Java中&#xff0c;虽然JVM的规范和设计努力避免对象处于这种不稳定的状态&#xff0c;但在多线程环境下&#xff0c;由于指令重排序等并发问题&#xff0c;仍有可能…

【LeetCode刷题笔记】LeetCode.24.两两交换链表中的节点

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

新手小白的pytorch学习第一弹-------张量

1 导入pytorch包 import torch2 创建张量&#xff08;tensor&#xff09; scalar标量 scalar torch.tensor(7) scalartensor(7)scalar.ndim查看scalar的维度&#xff0c;因为scalar是标量&#xff0c;所以维度为0 0scalar.shapetorch.Size([])torch.item()7vector&#xf…

Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具

目录 保持连接 访问控制 只允许指定ip访问 拒绝指定主机其他正常访问 用户授权 日志格式 日志分割 操作步骤 使用第三方工具cronolog分割日志 AWStats日志分析 操作步骤 访问AwStats分析系统 保持连接 Apache通过设置配置文件httpd-default.conf中相关的连接保持参…

基于Java的科大讯飞大模型API调用实现

写在前面&#xff1a;因为现在自己实习的公司新拓展的一个业务是结合AI的低代码平台&#xff0c;我负责后端的开发&#xff0c;之前一直都是直接使用gpt或者文心一言等ui界面来直接使用大模型&#xff0c;从来没有自己调接口过&#xff0c;所以本文记录一下自己第一次使用大模型…