当前位置: 首页 > 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…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...