当前位置: 首页 > news >正文

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串

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

回文性
如果字符串向前和向后读都相同,则它满足 回文性
子字符串
子字符串 是字符串中连续的 非空 字符序列。

动态规划法

class Solution {
public:string longestPalindrome(string s) {int n = s.size();if (n <= 1) return s;vector<vector<bool>> dp(n, vector<bool>(n, false));int start = 0, maxLen = 1;for (int i = 0; i < n; ++i) dp[i][i] = true;for (int i = 0; i < n - 1; ++i) {if (s[i] == s[i + 1]) {dp[i][i + 1] = true;start = i;maxLen = 2;}}for (int len = 3; len <= n; ++len) {for (int i = 0; i + len - 1 < n; ++i) {int j = i + len - 1;if (s[i] == s[j] && dp[i + 1][j - 1]) {dp[i][j] = true;start = i;maxLen = len;}}}return s.substr(start, maxLen);}
};

首先,我们获取字符串 s 的长度 n。如果字符串长度小于或等于 1,则字符串本身就是回文的(单个字符本身就是回文),直接返回字符串。

dp 是一个二维布尔型数组,dp[i][j] 用来表示子串 s[i...j] 是否为回文串。数组大小为 n x n,初始化为 false

每个单字符子串(即 s[i...i])自然是回文的,因此将 dp[i][i] 设置为 true

接下来,我们处理长度为 2 的子串。如果 s[i] == s[i+1],那么 s[i...i+1] 是回文串,设置 dp[i][i+1] = true。此时,我们还更新 startmaxLen,记录最长回文子串的起始位置和长度。

从长度为 3 的子串开始,我们逐步扩展到更长的回文子串。具体来说,len 表示当前子串的长度,从 3 一直增加到 n

对于每个长度为 len 的子串,我们通过以下条件判断是否为回文:

  • s[i] == s[j]:当前子串的首尾字符相同。
  • dp[i+1][j-1]:即子串 s[i+1...j-1] 是否是回文。

如果这两个条件都成立,那么 s[i...j] 也是回文子串,更新 dp[i][j] = true,并更新 startmaxLen,记录当前最长回文子串的起始位置和长度。

输入字符串 s = "babad"

  • 长度为 1 的子串:我们从一开始就知道每个单独的字符都是一个回文子串,所以 dp[i][i] = true 对于所有 i 都成立。对于 s = "babad",初始化时,dp 数组是这样的:

dp = [ [true, false, false, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

  • 长度为 2 的子串:接着,代码检查相邻的字符是否相同。如果相同,设置 dp[i][i+1] = true。在 s = "babad" 中,s[0] != s[1]b != a),s[1] != s[2]a != b),s[2] != s[3]b != a),s[3] != s[4]a != d)。所以 dp 数组没有更新。

dp 仍然是:

dp = [ [true, false, false, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

  • 长度为 3 及以上的回文子串:接着,程序检查长度为 3 及以上的子串,逐步扩展回文子串的长度。对每一个 len(长度从 3 到 n),我们依次检查每个子串的起始位置 i

    • len = 3

      • 对于 s[0...2] = "bab"s[0] == s[2]b == b),并且 dp[1][1] = true(即 "a" 是回文)。所以 dp[0][2] = truestart = 0maxLen = 3
      • 现在 dp 数组更新为:

      dp = [ [true, false, true, false, false], [false, true, false, false, false], [false, false, true, false, false], [false, false, false, true, false], [false, false, false, false, true] ]

      这时,我们已经找到了 "bab" 作为一个回文子串。

  • 继续检查更长的回文子串:

    • len = 4
      • 对于 s[1...4] = "abad"s[1] != s[4]a != d),所以 dp[1][4] 不会被设置。
    • len = 5
      • 对于 s[0...4] = "babad"s[0] != s[4]b != d),所以 dp[0][4] 也不会被设置。

经过这些步骤,程序最终会返回最长的回文子串 "bab",因为 start = 0maxLen = 3

相关文章:

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同&#xff0c;则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…...

Docker--Docker Registry(镜像仓库)

什么是Docker Registry&#xff1f; 镜像仓库&#xff08;Docker Registry&#xff09;是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像&#xff0c;这些镜像包含了应用程序及其相关的依赖项和配置&#xff0c;是构建和运行Doc…...

maven手动上传jar到私服仓库:mvn deploy:deploy-file命令

一、场景 现需要将公司内部的jar包上传到私服仓库&#xff0c;供其他同事使用&#xff0c;此时就需要用到mvn deploy:deploy-file命令。 二、 mvn deploy:deploy-file命令 举个栗子&#xff1a; mvn deploy:deploy-file -DgroupIdorg.pttsql -DartifactIdpttsql -Dversi…...

【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

向量(Vector)和矩阵(Matrix)&#xff1a;用于表示数据集&#xff08;Dataset&#xff09;和特征&#xff08;Feature&#xff09;。矩阵运算&#xff1a;加法、乘法和逆矩阵(Inverse Matrix)等&#xff0c;用于计算模型参数。特征值(Eigenvalues)和特征向量(Eigenvectors)&…...

无插件H5播放器EasyPlayer.js网页web无插件播放器选择全屏时,视频区域并没有全屏问题的解决方案

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…...

Idea中创建和联系MySQL等数据库

备注&#xff1a;电脑中要已下好自己需要的MySQL数据库软件 MySQL社区版下载链接&#xff1a; https://dev.mysql.com/downloads/installer/ 优点&#xff1a; 1.相比与在命令行中管理数据库&#xff0c;idea提供了图形化管理&#xff0c;简单明了&#xff1b; 2.便于与后端…...

【pytest】pytest注解使用指南

前言&#xff1a;在 pytest 测试框架中&#xff0c;注解&#xff08;通常称为装饰器&#xff09;用于为测试函数、类或方法提供额外的信息或元数据。这些装饰器可以影响测试的执行方式、报告方式以及测试的组织结构。pytest 提供了多种内置的装饰器&#xff0c;以及通过插件扩展…...

在Unity中使用Epplus写Excel

Overview 本文旨在帮助你快速入门,该库发展多年内容庞大(官方文档写的极好:https://github.com/EPPlusSoftware/EPPlus/wiki),有些功能在Unity环境可能你永远都不会使用. 官方的一个Demo: https://github.com/EPPlusSoftware/EPPlus.Samples.CSharp 如果你只有读的需求,可以…...

初识算法 · 模拟(2)

目录 前言&#xff1a; Z字形变换 题目解析 算法原理 算法编写 数青蛙 题目解析 算法原理 算法编写 前言&#xff1a; ​本文的主题是模拟&#xff0c;通过两道题目讲解&#xff0c;一道是Z字形变化&#xff0c;一道是数青蛙。 链接分别为&#xff1a; 1419. 数青蛙…...

【Java面试】—— 创建线程池的两种方式(执行流程、拒绝策略)(详细)

目录 一、ThreadPoolExecutor(推荐)(重点) 1、参数 2、执行流程 3、常用方法 4、任务拒绝策略 二、Executors(不推荐) 1、常用方法 2、存在的问题 一、ThreadPoolExecutor(推荐)(重点) 1、参数 使用指定的初始化参数创建一个新的线程池对象 public Thread…...

Docker在微服务架构中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Docker在微服务架构中的应用 Docker在微服务架构中的应用 Docker在微服务架构中的应用 引言 Docker 基本概念 1. 容器 2. 镜像 3…...

苹果ASA归因对接以及API接入

一、归因概要 广告归因&#xff0c;目的是用于衡量广告带来的激活用户的成本以及后续进一步的用户质量表现。 Apple Ads 广告平台是基于 App Store&#xff08;站内广告&#xff09;&#xff0c;同时属于自归因平台&#xff08;通常称为 SAN&#xff09;。这两个因素&#xff…...

Git常用操作学习

目录 Git基础概述 1.1 什么是Git&#xff1f; 1.2 Git的优点Git工作流程 2.1 集中式工作流程 2.2 功能分支工作流程 2.3 Git Flow工作流程克隆仓库 3.1 使用git clone 3.2 克隆特定分支分支管理 4.1 创建分支 4.2 切换分支 4.3 合并分支 4.4 删除分支提交和推送更改 5.1 查看状…...

2.5D视觉——Aruco码定位检测

目录 1.什么是Aruco标记2.Aruco码解码说明2.1 Original ArUco2.2 预设的二维码字典2.3 大小Aruco二维码叠加 3.函数说明3.1 cv::aruco::detectMarkers3.2 cv::solvePnP 4.代码注解4.1 Landmark图说明4.2 算法源码注解 1.什么是Aruco标记 ArUco标记最初由S.Garrido-Jurado等人在…...

【PSQLException: An I/O error occurred while sending to the backend.】

PSQLException: An I/O error occurred while sending to the backend. java项目定时任务执行耗时很长的sql语句(很多条sql,从很多表中,很多数据中查询,处理)总之,耗时很长(PG数据库)。报错I/O error,Caused by : java.net.SocketTimeoutException: Read time out场景…...

图像基础算法学习笔记

目录 概要 一、图像采集 二、图像标注 四、图像几何变换 五、图像边缘检测 Sobel算子 Scharrt算子 Laplacian算子 Canny边缘检测 六、形态学转换 概要 参考书籍&#xff1a;《机器视觉与人工智能应用开发技术》 廖建尚&#xff0c;钟君柳 出版时间&#xff1a;2024-…...

【Elasticsearch】01-ES安装

1. 安装 安装elasticsearch。 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--networ…...

网络性能测试

一、iperf网络性能测试工具 测试udp丢包率 在服务器启动 iperf 服务端 iperf -p 9000 -s -u -i 1参数说明&#xff1a; -p : 端口号 -s : 表示服务端 -u : 表示 udp 协议 -i : 检测的时间间隔(单位&#xff0c;秒) 在客户端&#xff0c;启动 iperf 客户端 iperf -c xxx.xxx.14…...

docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

无数次的拉镜像让人崩溃&#xff1a; rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…...

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;旨在设备之间进行通信&#xff0c;尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1&#xff1a; 优点&#xff…...

MemOS:为AI智能体构建统一记忆操作系统,提升长期对话与RAG性能

1. 项目概述&#xff1a;MemOS&#xff0c;为AI智能体装上“记忆大脑” 如果你正在开发基于大语言模型的AI智能体&#xff0c;或者在使用RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;那么你一定遇到过这个核心痛点&#xff1a; 对话上下文太短&#xff0c;智能体…...

终极网盘直链下载助手完整指南:快速免费获取8大网盘真实下载地址

终极网盘直链下载助手完整指南&#xff1a;快速免费获取8大网盘真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云…...

凰标:让草根创作不再被资本随意定义@凤凰标志

——一场属于民间的反垄断革命当代文娱行业最大的不公&#xff0c;从来不是草根缺乏创作能力&#xff0c;而是资本垄断了全部的定义权与话语权。 长期以来&#xff0c;从作品好坏、内容价值、审美取向到行业前途&#xff0c;所有评判标准皆由资本制定、流量数据裁定。无数底层创…...

终极图形化方案:Applite如何让Mac软件管理变得简单快速

终极图形化方案&#xff1a;Applite如何让Mac软件管理变得简单快速 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac上的软件安装、更新和卸载而烦恼吗&#xff1f;Ap…...

阴阳师自动化脚本终极指南:如何用OnmyojiAutoScript一键托管你的日常游戏

阴阳师自动化脚本终极指南&#xff1a;如何用OnmyojiAutoScript一键托管你的日常游戏 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师繁琐的日常任务而烦恼吗&#…...

硬件项目规划:从确定性预测到适应性导航的思维重构

1. 项目概述&#xff1a;硬件项目规划的“信心危机”“计划失败就是计划失败”&#xff0c;这个标题乍一看像是一句绕口令&#xff0c;但当你身处一个硬件开发团队&#xff0c;尤其是负责ASIC、FPGA或复杂嵌入式系统时&#xff0c;这句话背后的沉重感会瞬间变得无比真实。我们常…...

开题报告一次通关密码:告别反复修改,虎贲等考 AI 重新定义高效开题

每一位本硕博学生都懂&#xff1a;开题不顺&#xff0c;论文全乱。开题报告是毕业论文的 “总设计图”&#xff0c;选题、框架、文献、技术路线只要一项不达标&#xff0c;就会被导师反复打回&#xff0c;浪费时间、消耗心态&#xff0c;甚至直接拖慢整个毕业节奏。可自己写开题…...

Unity性能优化实战:Mesh Baker 纹理合并与UV重映射详解

1. 为什么需要纹理合并与UV重映射 在开发开放世界游戏时&#xff0c;场景中往往会出现大量重复的建筑、植被等模型。每个模型通常都有自己的材质球和贴图&#xff0c;这会导致两个严重问题&#xff1a;首先是Draw Call数量激增&#xff0c;每个材质球都会产生一次Draw Call&…...

中文知识管理利器:本地化部署与向量检索实践指南

1. 项目概述&#xff1a;一个面向中文用户的知识管理利器 最近在折腾个人知识库&#xff0c;发现了一个挺有意思的开源项目&#xff0c;叫 RomeoSY/zh-knowledge-manager 。乍一看名字&#xff0c;你可能觉得这又是一个“知识管理”工具&#xff0c;市面上不是有 Notion、Ob…...

MCP2MQTT 完全指南:用 AI 自然语言控制硬件设备的开源 MCP 工具

前言 2025年4月&#xff0c;MCP2Everything 团队正式开源MCP2MQTT&#xff0c;这是全球首个将 MCP&#xff08;模型上下文协议&#xff09;与 MQTT 物联网协议无缝桥接的开源工具&#xff0c;彻底打通了 AI 大模型与物理硬件之间的"最后一公里"。无需编写任何胶水代码…...