力扣---最长回文子串(动态规划)

目录

​编辑

题目

思路步骤:

代码

我的其他博客


题目
 

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

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

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

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

思路步骤:

  1. 初始化状态: 创建一个二维数组 dp,其中 dp[i][j] 表示字符串 s 从索引 i 到索引 j 的子串是否是回文串。初始化所有长度为 1 的子串为回文串。

  2. 处理长度为 2 的子串: 遍历字符串,检查相邻字符是否相等,如果相等则将 dp[i][i+1] 设为 true,表示长度为 2 的子串是回文串。

  3. 处理长度为 3 或更大的子串: 使用一个嵌套循环,外层循环控制子串的长度 len,内层循环遍历字符串,检查从索引 i 到索引 j 的子串是否是回文串。如果 dp[i+1][j-1]trues.charAt(i) == s.charAt(j),则说明当前子串也是回文串。

  4. 记录最长回文子串: 在内层循环中,如果发现新的回文子串长度比之前记录的最长回文子串更长,则更新 startmaxLength

  5. 返回结果: 最终,返回最长回文子串 s.substring(start, start + maxLength)

要使用动态规划解决这个问题,首先要定义状态和状态转移方程。在这里,我们可以定义一个二维数组 dp,其中 dp[i][j] 表示字符串 s 从索引 i 到索引 j 的子串是否是回文串。

代码

public class LongestPalindromeSubstring {public static String longestPalindrome(String s) {if (s == null || s.length() == 0) {return "";}int n = s.length();boolean[][] dp = new boolean[n][n];int start = 0;int maxLength = 1;// All substrings of length 1 are palindromesfor (int i = 0; i < n; i++) {dp[i][i] = true;}// Check substrings of length 2for (int i = 0; i < n - 1; i++) {if (s.charAt(i) == s.charAt(i + 1)) {dp[i][i + 1] = true;start = i;maxLength = 2;}}// Check substrings of length 3 or morefor (int len = 3; len <= n; len++) {for (int i = 0; i <= n - len; i++) {int j = i + len - 1;  // Ending index of the substring// Check if the substring is a palindrome and the inner substring is also a palindromeif (dp[i + 1][j - 1] && s.charAt(i) == s.charAt(j)) {dp[i][j] = true;start = i;maxLength = len;}}}return s.substring(start, start + maxLength);}public static void main(String[] args) {String s1 = "babad";String s2 = "cbbd";System.out.println(longestPalindrome(s1));  // Output: "bab" or "aba"System.out.println(longestPalindrome(s2));  // Output: "bb"}
}

 

我的其他博客

探索灵活性与可维护性的利器:策略(Strategy)模式详解-CSDN博客

深入探讨敏捷开发项目管理流程与Scrum工具:构建高效团队与卓越产品的秘诀-CSDN博客

vue的生命周期-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

Linux 压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

JVM的类的生命周期-CSDN博客

多线程------Future异步任务-CSDN博客

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

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

相关文章

详解git pull和git fetch的区别

git pull和git fetch的区别, 网上人云亦云胡说八道的实在是太多了&#xff0c;误导我很久。 今天看到一个说得好的&#xff0c;记录一下。 前言 在我们使用git的时候用的更新代码是git fetch&#xff0c;git pull这两条指令。但是有没有小伙伴去思考过这两者的区别呢&#xff…

统计3个点在3维空间的分布

在4*4*4的立方体中&#xff0c;随机取3个点&#xff0c;有64*63*62/641664个结构&#xff0c; 21440 % 20224 % 1 1728 0.0415 17 1728 0.041475 2 1728 0.0415 18 1728 0.041475 3 576 0.0138 19 384 0.009217 4 576 0.0138 20 3456 0.082949 5 …

简述SD-WAN组网的五大技术优势

在信息时代&#xff0c;企业对网络的需求不再局限于简单的连接&#xff0c;而是追求更加高效、灵活和可靠的网络架构。SD-WAN&#xff08;软件定义广域网&#xff09;作为一项先进的组网技术&#xff0c;以其独特的优势成为企业网络升级的热门选择。本文将深入探讨SD-WAN的技术…

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…

2023年全球运维大会(GOPS深圳站)-核心PPT资料下载

一、峰会简介 1、大会背景与概述 全球运维大会&#xff08;GOPS&#xff09;是运维领域最具影响力的国际盛会&#xff0c;每年都会汇聚世界各地的运维专家、企业领袖、技术爱好者&#xff0c;共同探讨运维技术的最新发展、最佳实践以及面临的挑战。2023年GOPS深圳站作为该系列…

JDK21+HADOOP3.2.2+Windows安装步骤

哈哈哈 最近转战大数据这块了&#xff0c;分享一下hadoop3.2.2的安装步骤 借鉴了不少大佬的文章&#xff0c;如有雷同&#xff0c;都是大佬们的 1.JDK安装 我选择的是JDK21 以下是下载网址和截图&#xff0c;这个没有太多的&#xff0c;一般下载最新的就可以 JDK: Java Down…

Excel 如何把一句话里的特定字标记颜色

方案&#xff1a; 借助Work功能 诉求&#xff1a;把如下Excel内容里所有的天标记为红色 第一步&#xff1a;复制到World里 第二步&#xff1a; CtrlH 然后如图执行替换 第3步&#xff1a;World 复制会 Excel

HTML---CSS美化网页元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.div 标签&#xff1a; <div>是HTML中的一个常用标签&#xff0c;用于定义HTML文档中的一个区块&#xff08;或一个容器&#xff09;。它可以包含其他HTML元素&#xff0c;如文本、图像…

引领半导体划片机行业,实现钛酸锶基片切割的卓越效能

在当今快速发展的半导体行业中&#xff0c;博捷芯以其卓越的技术实力和精准的行业应用&#xff0c;脱颖而出&#xff0c;再次引领行业潮流。这次&#xff0c;他们将先进的BJX3356划片机技术应用于钛酸锶基片的切割&#xff0c;为半导体制造行业的进一步发展提供了强大的技术支持…

olap/clickhouse-编译器优化与向量化

本文主要结合15721和clickhouse源码来聊聊向量化&#xff0c;正好我最近也在用Eigen做算子加速&#xff0c;了解下还是有好处的。 提示编译器 提示编译器而不是复杂化简单的代码 什么时候使用汇编&#xff0c;什么时候使用SIMD&#xff1f;下面有几个基本原则&#xff1a; …

饥荒Mod 开发(十六):五格装备栏

饥荒Mod 开发(十五)&#xff1a;小地图显示物品 源码 饥荒中的装备栏只有3个实在太少了&#xff0c;手&#xff0c;头&#xff0c;身体。 身体上装备的物品会有冲突&#xff0c;很多不能一起装备&#xff0c;比如 衣服&#xff0c;项链&#xff0c;背包等。 而这三种物品又有自…

OpenHarmony应用开发环境搭建指南

OpenHarmony的应用开发主要是基于Deveco Studio&#xff08;目前只支持Windows及Mac平台&#xff09;搭配相应的SDK进行&#xff0c;现对开发环境的搭建进行说明。 1:Deveco下载安装 下载对应平台的安装包即可。接下来以Windows平台为例&#xff0c;进行开发环境的搭建。 下载…