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

news2024/11/25 16:47:45

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

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

题目描述:

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

示例:

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

提示:

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

解题思路:(动态规划)

创建一个二维布尔数组 dp,其中 dp[i][j] 表示字符串从索引 j 到 i 的子串是否为回文串。
同时,初始化 startIndex 和 maxLen,分别表示最长回文子串的起始索引和长度。
使用两层嵌套循环遍历字符串。外层循环控制结束索引 i,内层循环控制起始索引 j。
对于每一对索引 (i, j),检查当前字符是否相等且满足回文条件。状态转移方程为:dp[i][j] = chs[i] == chs[j] && ((i - j + 1 <= 3) || dp[i - 1][j + 1])
其中,(i - j + 1 <= 3) 表示当前子串长度小于等于3,直接满足回文条件;dp[i - 1][j + 1] 表示去掉两端字符后的子串也是回文串。
如果当前子串为回文且长度大于 maxLen,则更新 maxLen 和 startIndex。
最终返回最长回文子串,通过 startIndex 和 maxLen 在原始字符串中截取。
时间复杂度:  O(n^2)

代码:

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.coloradmin.cn/o/1433685.html

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

相关文章

FFMPEG推流到B站直播

0、参考 ffmpeg安装参考小弟另外的一个博客&#xff1a;FFmpeg和rtsp服务器搭建视频直播流服务-CSDN博客推流参考&#xff1a;用ffmpeg 做24小时推流直播_哔哩哔哩_bilibili 一、获取b站直播码 点击开始直播后&#xff0c;会出现以下的画面 二、ffmpeg进行直播推流 ffmpeg -r…

python常用pandas函数nlargest / nsmallest及其手动实现

目录 pandas库 Series和DataFrame nlargest和nsmallest 用法示例 代替方法 手动实现 模拟代码 pandas库 是Python中一个非常强大的数据处理库&#xff0c;提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况&#xff0c;同时在时间…

速过计算机二级python——第六讲:文件操作

第六讲:文件操作 文件夹创建文件夹移动文件夹复制文件夹删除文件夹文件操作文件读取文件写入文件文件夹 创建文件夹 定义创建文件夹函数:chmk_path()定义一个函数 chmk_path(),这个函数的功能是创建文件夹。 首先需要导入操作系统接口模块——os 模块,这个模块中包含某些函…

Linux校准时间 Centos

Linux校准时间 Centos 首先&#xff0c;确保系统中已经安装了tzdata包。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo yum install tzdata设置系统时区为上海&#xff1a; sudo timedatectl set-timezone Asia/Shanghai验证时区设置是否生效&#xff1a;…

STM32F407 CAN参数配置 250Kbps

本篇CAN参数适用 芯片型号&#xff1a;STM32F407xx系统时钟&#xff1a;168MHz&#xff0c;CAN挂载总线APB1为42M波 特 率 &#xff1a;250Kpbs引脚使用&#xff1a;TX_PB9&#xff0c;RX_PB8&#xff1b;修改为PA11PA12后&#xff0c;参数不变。 步骤一、打勾开启CAN&#xf…

视频业务像素、带宽、存储空间计算

一、像素和分辨率 分辨率的单位通常是像素&#xff08;或点&#xff09;&#xff0c;用水平像素数乘以垂直像素数来表示。例如&#xff0c;一个分辨率为1920 x 1080的屏幕有1920个水平像素和1080个垂直像素。 总像素分辨率公式运算 例如 1920 x 10802073600总约200万 500W≈…

Rocky8+MHA搭建

文章目录 1、MHA 是什么1.1、MHA概念1.2、MHA 组成1.3、MHA特点 2、MHA架构2.1、MHA架构设计2.2、MHA准备工作2.3、服务器基础配置2.3.1、hosts配置2.3.2、修改主机名2.3.3、配置防火墙2.3.4、更新所有服务器2.3.5、所有服务器相互授权 3、mysql8安装3.1、卸载旧mysql3.2、安装…

幻兽帕鲁专用服务器,多人游戏(专用服务器)搭建

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

react和antd学习笔记

概论 react是前端框架&#xff0c;antd是组件库。前端框架和组件库的区别与联系 nodejs 脚本语言需要一个解析器才能运行&#xff0c;JavaScript是脚本语言&#xff0c;在不同的位置有不一样的解析器&#xff0c;如写入html的js语言&#xff0c;浏览器是它的解析器角色。而对…

网络安全产品之准入控制系统

文章目录 一、什么是准入控制系统二、准入控制系统的主要功能1. 接入设备的身份认证2. 接入设备的安全性检查 三、准入控制系统的工作原理四、准入控制系统的特点五、准入控制系统的部署方式1. 网关模式2. 控制旁路模式 六、准入控制系统的应用场景七、企业如何利用准入控制系统…

大数据 - Spark系列《三》- 加载各种数据源创建RDD

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 目录 3.1&#x1f9c0;加载文件(本地) 1. 加载本地文件路径 &#x1f32e;使用te…

倍增法+LCA(C/C++)

目录 1 介绍 2 基本模板 1 介绍 倍增法(binary lifting)&#xff0c;是一种每次将情况翻倍从而将线性处理转化为对数级处理&#xff0c;进而极大优化时间复杂度的方法。 2 基本模板 //预处理复杂度同为O(nlogn),查询时间上&#xff0c;ST表为O(1),线段树为O(logn) #inc…

[C++] 如何使用Visual Studio 2022 + QT6创建桌面应用

安装Visual Studio 2022和C环境 [Visual Studio] 基础教程 - Window10下如何安装VS 2022社区版_visual studio 2022 社区版-CSDN博客 安装QT6开源版 下载开源版本QT Try Qt | 开发应用程序和嵌入式系统 | Qt Open Source Development | Open Source License | Qt 下载完成&…

华为交换机配置Qos

QoS在企业网中的应用 在企业网络中&#xff0c;QoS的一系列技术不要求在同一台设备上应用&#xff0c;而应根据业务需要在不同位置应用。 图5 QoS技术在企业网络中的应用 理论上来说&#xff0c;各层次设备的功能如下&#xff1a; l 接入层业务识别 接入交换机LSW1作为边界…

常用工具类-Arrays

常用工具类-Arrays 数组打印创建数组比较数组数组排序和检索数组转ListsetAll 和 parallelSetAll 数组打印 Arrays提供了toString()方法&#xff0c;可以直接将数组的内容打印出来&#xff0c;极为便捷。 String[] strArr new String[] {"1","2","…

16.docker删除redis缓存数据、redis常用基本命令

1.进入redis容器内部 &#xff08;1&#xff09;筛选过滤出redis容器 docker ps | grep "redis"&#xff08;2&#xff09;进入redis容器 #说明&#xff1a;d24为redis容器iddocker exec -it d24 /bin/bash2.登陆redis (1) 进入redis命令行界面 redis-cli说明&a…

go消息队列RabbitMQ - 订阅模式-direct

1.发布订阅 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;不能…

javaEE - 21( 15000字 Tomcat 和 HTTP 协议入门 -2)

一&#xff1a; HTTP 响应 1.1 认识 “状态码” (status code) 状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)&#xff0c;以下为常见的状态码. 1.1.1 200 OK 这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200 HTTP/…

004集—二调数据库标注分子分母模式及统计净面积——arcgis

二调数据库中分子分母标注方法为&#xff1a; 表达式如下&#xff1a; "<und>"& [TBBH] &"</und>" &vbnewline& [DLBM] "<und>"&[DLBM]&"</und>" &vbnewline& [DLMC] &quo…

Anaconda的安装及其配置

一、简介 Anaconda是一个开源的包、环境管理器&#xff0c;主要具有以下功能和特点&#xff1a; 提供conda包管理工具&#xff1a;可以方便地创建、管理和分享Python环境&#xff0c;用户可以根据自己的需要创建不同的环境&#xff0c;每个环境都可以拥有自己的Python版本、库…