力扣热门100题 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串

  • 题目描述:
  • 示例:
  • 提示:
  • 解题思路:(动态规划)
  • 代码:

题目链接:5. 最长回文子串

题目描述:

给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
输入:s = "cbbd"
输出:"bb"

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母组成

解题思路:(动态规划)

  1. 创建一个二维布尔数组 dp 用于记录字符串中的回文子串。
  2. 初始化变量 startIndexmaxLen 为 0,用于记录最长回文子串的起始索引和长度。
  3. 遍历字符串 s 中的每个字符,利用两层循环来确定所有可能的子串,并检查它们是否是回文串。
  4. 在内部循环中,判断两个字符是否相等,如果相等,则有可能构成回文串。如果是的话,检查子串长度是否小于等于 3(此时一定是回文串),或者查看子串去除两端字符后是否是回文串(即 dp[i - 1][j + 1] 是否为 true)。
  5. 如果当前子串是回文串且长度大于 maxLen,则更新 maxLenstartIndex
  6. 最终返回从 startIndex 开始、长度为 maxLen 的子串。

时间复杂度: O(n^2)

这种方法的时间复杂度是 O(n^2),其中 n 是字符串的长度,因为需要遍历整个字符串并在每个位置上检查回文串的可能性。

代码:

public String longestPalindrome(String s) {int len = s.length();// 长度小于二一定是回文串直接返回if (len < 2) return s;char[] chs = s.toCharArray();boolean[][] dp = new boolean[len][len];int startIndex = 0;int maxLen = 1; for (int i = 1; i < len; i++) {for (int j = 0; j < i; j++) {if (chs[i] == chs[j] && ((i - j + 1 <= 3) || dp[i - 1][j + 1])) {dp[i][j] = true;if (i - j + 1 > maxLen) {maxLen = i - j + 1;startIndex = j;}} else {dp[i][j] = false;}}}return s.substring(startIndex, startIndex + maxLen);}

在这里插入图片描述

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

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

相关文章

补题:leetcode第382场周赛 3022. 给定操作次数内使剩余元素的或值最小

3022. 给定操作次数内使剩余元素的或值最小 - 力扣&#xff08;LeetCode&#xff09; 拆位 n个数进行或运算的结果最小&#xff0c;每次操作可以对相邻的两个数进行与运算&#xff0c;至多进行k次操作 n个数进行或运算&#xff0c;可以对每个数进行拆解&#xff0c;拆解成最小…

vue3 mathjax 数学公式

安装 pnpm install mathjax 新建文件/util/mathjax.js window.MathJax {tex: {inlineMath: [["$", "$"],["\\(", "\\)"],], // 行内公式选择符displayMath: [["$$", "$$"],["\\[", "\\]"…

Linux的进程信号

注意&#xff1a;首先需要提醒一个事情&#xff0c;本节提及的进程信号和下节的信号量没有任何关系&#xff0c;请您区分对待。 1.信号概念 1.1.生活中的信号 我们在生活中通过体验现实&#xff0c;记忆了一些信号和对应的处理动作&#xff0c;这意味着信号有以下相关的特点&…

idea开发工具的简单使用与常见问题

1、配置git 选择左上角目录file->setting 打开&#xff0c;Version Control 目录下Git&#xff0c;选择git安装目录下的git.exe文件&#xff1b; 点击test&#xff0c;出现git版本&#xff0c;则表示git识别成功&#xff0c;点击右下角确认即可生效。 2、配置node.js 选…

nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(中)

目录 6. 源码分析6.1 解析指令分析6.2 待检查的服务器的添加和状态查询6.3 本模块的进程初始化函数6.4 准备执行健康检测任务6.5 执行健康检测任务本篇对ngx_http_upstream_check_module的源码实现进行详细分析。 关于配置和使用部分可以查看上篇:nginx upstream server主动健…

table列折行

这里折叠后少了合同名称,风险进展,预判无法达成金额 通过按钮的状态,来控制某一列的显示与隐藏, <el-tablev-loading"loading"v-if"tableStatus"border:data"tableData":key"tableKey"id"table"class"table-self is…

【MATLAB】使用梯度提升树在回归预测任务中进行特征选择(深度学习的数据集处理)

1.梯度提升树在神经网络的应用 使用梯度提升树进行特征选择的好处在于可以得到特征的重要性分数&#xff0c;从而识别出对目标变量预测最具影响力的特征。这有助于简化模型并提高其泛化能力&#xff0c;减少过拟合的风险&#xff0c;并且可以加快模型训练和推理速度。此外&…

C#,河豚算法(Blowfish Algorithm)的加密、解密源代码

Bruce Schneier 1 河豚算法&#xff08;Blowfish Algorithm&#xff09; 河豚算法&#xff08;Blowfish Algorithm&#xff09;是1993年11月由Bruce Schneier设计的一个完全开源的算法。 Blowfish算法是一个分组长度为64位、密钥长度可变的对称分组密码算法。 Blowfish算法具…

docker复习笔记01(小滴课堂)安装+部署mysql

查看内核版本。 关闭防火墙&#xff1a; 查看docker版本&#xff1a; 下载阿里yum源&#xff1a; 再看一下yum版本都有哪些&#xff1a; 我们可以看的docker-ce了。 安装它&#xff1a; 设置docker服务开机启动&#xff1a; 更新日志文件&#xff1a; 启动docker&#xff1a; …

【云原生之kubernetes系列】--HPA自动伸缩

HPA自动伸缩 HorizontalPodAutoscaler&#xff08;简称 HPA &#xff09;自动更新工作负载资源&#xff08;例如Deployment或者Statefulset)&#xff0c;目的是让pod可以自动扩缩工作负载以满足业务需求。 水平扩缩意味着对增加的负载的响应是部署更多的Pod。这与“垂直&…

【零基础入门TypeScript】Union

目录 语法&#xff1a;Union文字 示例&#xff1a;Union类型变量 示例&#xff1a;Union 类型和函数参数 Union类型和数组 示例&#xff1a;Union类型和数组 TypeScript 1.4 使程序能够组合一种或两种类型。Union类型是表达可以是多种类型之一的值的强大方法。使用管道符号…

某公司遭遇AI换脸诈骗,被骗走两个亿!

大家好我是二狗。 这年头&#xff0c;AI换脸不是个新鲜事了。 但是你敢信香港一公司因此被骗了两亿港元&#xff1f; 事情究竟是怎么一回事呢&#xff1f; 据香港文区报2月4日报道&#xff0c;香港警方披露首宗多人换脸AI诈骗案&#xff0c;一家总部在英国的跨国公司的香港…