最长回文子串

devtools/2025/2/25 11:21:05/

标题

1.1 问题描述

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

1.2 示例

1.2.1 示例1

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

1.2.2 示例2

输入:s = “cbbd”
输出:“bb”

1.3 提示

  • 输入:s = “cbbd”
  • 输出:“bb”

1.4 思路分析

  在解决最长回文子串问题时,采用的是中心扩展法。首先,回文串具有对称特性:无论是奇数长度(如“aba”)还是偶数长度(如“abba”),其中心可能是单个字符或相邻的两个字符。因此,可以设计了一个辅助函数center,用于判断当前位置是否是某个回文字符串的中心点,即输入当前中心点的左右边界,通过向两侧扩展判断是否满足回文条件。例如,以索引 i 为中心的单数情况调用center(s,i,i),而处理双数情况时则调用center(s,i,i+1)。
  遍历字符串的每一个位置时,需要同时考虑这两种中心扩展的可能性。每次扩展后,函数返回当前中心能构成的最长回文子串的左右边界。例如,对于字符串“babad”,当 i=1 时,单数扩展得到“bab”(边界0-2),双数扩展无结果,此时记录下当前最长边界。通过比较每次单双数扩展的结果,动态更新全局最长回文的起始和终止索引。最终,通过 substr 截取最长子串。这种方法的时间复杂度为O(n²),但避免了动态规划的空间开销,且逻辑直观,覆盖了所有可能的回文中心。

1.5 代码

#include<bits/stdc++.h>
using namespace std;
pair<int,int> center(string s,int left,int right){while((left>=0)&&(right<s.size())&&(s[left]==s[right])){left--;right++;}return {left+1,right-1};
}
string longestPalindrome(string s) {int start=0;int end=0;for(int i=0;i<s.size();i++){// 处理以回文长度为单数的情况auto [l1,r1] = center(s,i,i);// 处理回文长度为双数的情况auto [l2,r2] = center(s,i,i+1);if(r1-l1>end-start){start = l1;end = r1;}if(r2-l2>end-start){start = l2;end = r2;}}return s.substr(start,end-start+1);
}int main(){string s = "babad";cout<<longestPalindrome(s)<<endl;
}

结果
在这里插入图片描述


http://www.ppmy.cn/devtools/161573.html

相关文章

【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

AI-Engine-Direct-Helper快速上手(3):图像修复应用实例

AOTGAN&#xff08;Aggregated Contextual Transformations for High-Resolution Image Inpainting&#xff09;是一种基于注意力机制的生成对抗网络&#xff08;GAN&#xff09;模型&#xff0c;主要用于图像修复任务。它通过聚合不同膨胀率的空洞卷积学习到的图片特征&#x…

Prompt-to-Prompt 进行图像编辑

Prompt-to-Prompt 图像编辑是一种基于注意力机制的图像编辑技术&#xff0c;它通过在输入图像和编辑目标之间建立一个双向注意力机制来实现图像编辑。这种技术可以让模型根据输入图像的内容和编辑目标的描述来进行图像编辑。 交叉注意力控制是 Prompt-to-Prompt 图像编辑中的一…

后端之JPA(EntityGraph+JsonView)

不同表之间的级联操作或者说关联查询是很多业务场景都会用到的。 对于这种需求最朴素的方法自然是手动写关联表&#xff0c;然后对被关联的表也是手动插入数据。但是手写容易最后写成一堆shit代码&#xff0c;而且修改起来也是非常麻烦的。 学会使用现成的工具还是非常有利的…

《量子计算:开启未来的钥匙》:此文为AI自动生成

量子计算:一场颠覆性的科技革命 在科技飞速发展的今天,量子计算作为一项前沿技术,正逐渐崭露头角,引领着一场新的科技革命。它以其独特的计算原理和强大的计算能力,成为了全球科技领域的焦点,被誉为未来计算的希望之星。 与传统计算相比,量子计算就像是一场跨越时代的…

Mac下VSCode调试skynet的lua环境配置

Mac下VSCode调试skynet的lua环境配置 安装Lua5.4安装Luasocket下载LuaPanda.lua安装VScode LuaPanda插件配置skynet&#xff0c;在lua_cpath引入luasocket库创建launch.json在需要调试的lua文件里面添加代码 安装Lua5.4 brew install lua5.4安装Luasocket LuaPanda需要luasoc…

DeepSeek引领目标检测新趋势:如何通过知识蒸馏优化模型性能

目录 一、知识蒸馏是什么&#xff1f; 二、知识蒸馏在目标检测中的重要性 提升实时性 跨任务迁移学习 三、如何使用知识蒸馏优化目标检测&#xff1f; 训练教师模型 生成软标签 训练学生模型 调节温度参数 多教师蒸馏&#xff08;可选&#xff09; 四、案例分享 定…

如何向zookeeper中注册内容

我来为你展示如何在Java项目中使用Apache ZooKeeper注册内容。这里提供一个简单但完整的示例&#xff0c;包含依赖配置和代码实现。 首先需要在pom.xml中添加ZooKeeper依赖&#xff08;假设使用Maven&#xff09;&#xff1a; <dependency><groupId>org.apache.z…