leetcode 5 最长回文子串

力扣5. 最长回文子串C++详解 力扣5. 最长回文子串 注:子数组或者子字符串求解问题一般基本是用DP算法 最长回文子串的解释:正着读和反着读是一样的。 题目解析: 解法一:动态规划 从回文子串的定义我们可以得出两个结论: (1)如果说一个子字符串是回文子串,那么给这个子字符串两边分别加一个数,如果这2个数相等,那么这个新的子字符串也是回文子串。 (2)回文子串的开始和结束位置的字符一定是相... 阅读详情

看题解,学了两种解法:扩散法和DP

1. 扩散法

根据回文串的特性,它是从中间向两边扩散,两边的字符相同。因此定义一个函数:

  1. 函数的变量是从中间位置扩散的左右端点;
  2. 满足对称条件时扩散( l–, r++ ),不满足则停止;
  3. 如果此时对应更大的长度,则更新起始位置和长度
  4. 变换中间点,重复以上步骤(遍历一下)
  5. 需要注意,遍历过程中,中间点可能是1个字符(奇对称),也可能2个(偶对称),即 l 和 r 可能相同,也可能 l + 1 = r
def huiwen(s: str):
	length = start = 0
	
	def ks(i,j):
		nonlocal length, start
		while i >= 0 and j < len(s) and s[i] == s[j]:
			i -= 1
			j += 1
			if length < j - i - 1:
				length = j - i - 1
				start = i + 1 
			# 因为i、j的运算是在判断其符合要求之后进行的,所以最后i和j都多算了一次
	for i in range(len(s)):
		ks(i,i)
		ks(i,i+1)
	return s[start: start + length]

做题的时候卡在 length, start 上,之前一直错误的以为父函数的变量天然是子函数的全局变量,结果定义 ks 函数的时候 length 总被认为没有定义,后来找到原因:

python解释器在处理变量的时候,如果没有出现会去上下文中寻找,如果不需要对这个变量赋值的话,这个变量就利用闭包的特性可以直接使用,如果需要赋值,那么变量会被解释器视作 局部变量,就没有与上文的变量绑定了。使用nonlocal 其实就是告诉编译器,我需要使用上文中的那个变量。

原文在这里:python嵌套函数调用上层函数的局部变量, nonlocal 关键字

2 DP

  1. i, j 分别是字符串起止下标,i <= j
  2. 当 s[i+1, j-1] 符合,s[i] == s[j] 时,s[i, j] 符合要求
  3. 用 dp[i][j] 记录当前下标对应的s是否回文
  4. a = 1 if s[i] == s[j] else 0, dp[i][j] = dp[i+1][j-1] + a, 这种直接用dp记录长度的解法没考虑内部不合题意,外部却符合题意的情况,应该在在内部合理的前提下。
  5. 记下长度和起始位置
def hw(s, n):
	if n <= 1: return s
       length = 1
       start = 0
       dp = [[False] * n for _ in range(n)]	
       for i in range(n):
           dp[i][i] = True #起止字符相同时
           
       for j in range(1,n):
           for i in range(0,j): 
             if s[i] == s[j]:
                 dp[i][j] = s[i] == s[j] and (dp[i+1][j-1] or j-1 - (i+1) < 1)
                 
             #当前合理时
             if dp[i][j]:
                 if length < j - i + 1:
                     length = j - i + 1
                     start = i
    return s[start: start + length]	
【Leetcode】5. 最长回文子串 给你一个字符串s,找到s中最长的回文子串。解释:“aba” 同样是符合题意的答案。 阅读详情

相关推荐

力扣5:最长回文子串

5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 常规的暴力法就是遍历各个子串,并且判断子串是否是回文串,这样时间复杂度为O(n^3) 接下来我们看动态规划做法 我们假设一个dp数组,dp[i][j]表示s[i…j]是否为回文串 由于回文子串具备天然的状态转移特性 当两头字母相同时,去掉两头字母

码农ZZK的博客 460

力扣LeetCode: 5 最长回文子串

回文串的几种常见方法,枚举,中心拓展,动态规划

weixin_73982851的博客 915

【中等】力扣算法题解析LeetCode5:最长回文子串

题目要求找到字符串中最长的回文子串,采用中心扩散法。遍历每个字符及其间隙作为中心,向两边扩展寻找最长回文子串。时间复杂度O(n²),空间复杂度O(1)。Java实现通过expandAroundCenter方法计算回文长度,更新最大子串边界后返回结果。

ylumwd的博客 419

力扣LeetCode第5最长回文子串

力扣LeetCode第五题最长回文子串

weixin_44061444的博客 168

【万字长文】学习Armv8架构虚拟化一篇就够了

这里我们将介绍一些基础的Hypervisor和虚拟化的理论知识。如果你已经有一定的基础或是已经熟悉了这些概念,可以跳过这部分内容。我们用Hypervisor这个词来定义一种负责创建,管理以及调度虚拟机(Virtual Machines, VMs)的软件。Stage 2 转换允许Hypervisor控制虚拟机的内存视图。具体来说,其可以控制虚拟机是否可以访问特定的某一块物理内存,以及该内存块出现在虚拟机内存空间的位置。这种能力对于虚拟机的隔离和沙箱功能来说至关重要。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5321

FIFO应用于UART串口(含代码)

FIFO(First in first out)即先入先出,可以把它理解成一个缓存器,对于收发两端速度不一致,位宽不一致的情况可以使用FIFO作为收发两端中间的“调节剂”使数据可以进行正常发送。

m0_58544042的博客 2754

【力扣LeetCode】5 最长回文子串

题目描述(难度中) 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 链接 https://leetcode-cn.com/problems/longest-palindromic-substring/ 思路 1...

Jiewang的博客 272

从零开始搭建GD32F103CBT6开发环境:VSCode配置与实战技巧

本文详细介绍了如何从零开始为国产MCU GD32F103CBT6搭建高效的VSCode开发环境。内容涵盖工具链安装、VSCode核心插件配置、工程目录结构规划、关键配置文件编写以及Makefile实战,旨在帮助开发者摆脱传统IDE束缚,利用现代化工具链提升嵌入式开发效率。

weixin_29158413的博客 448

5.最长回文子串-力扣(LeetCode)

5.最长回文子串-力扣(LeetCode)的两种做法:中心扩展法和动态规划,附有c++和Java代码,以及详细注释

m0_74304371的博客 1015

restbed编译笔记

Restbed 可以构建出基于asio库的restfulAPI服务,Restbed 4.7版本使用了1.12.0版本的asio(其他版本编译不通过),可直接访问github下载:https://github.com/chriskohlhoff/asio/tree/asio-1-12-0。另外Restbed还依赖openssl库(可直接下载exe的安装包,安装后取出lib库及头文件放到到restbed\dependency\openssl中即可,https://slproweb.com/download/W.

mahong100的博客 2108

【2026年华为秋招(AI)-2月4日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要:本文包含20道选择题,涵盖机器学习、线性代数、Transformer架构、概率统计等多个领域。题目涉及正交矩阵性质、Transformer注意力机制、聚类距离度量、ReAct框架、Softmax函数、混淆矩阵计算、Flash-Attention优化、位置编码、期望计算、归一化方法、矩阵迭代法、矩阵秩、大模型架构、神经网络推理、泊松流性质、SVM核函数以及聚类算法等知识点。每道题均提供解析,帮助理解核心概念和解题思路。

m0_73659489的博客 126

leetcode-5 最长回文子串

坚持打卡! 题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palin...

陈三一的博客 291

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 948

力扣 leetcode 5. 最长回文子串(python)

Topic 给你一个字符串 s,找到 s 中最长的回文子串。 Example_1 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 Example_2 输入:s = “cbbd” 输出:“bb” Example_3 输入:s = “a” 输出:“a” Example_4 输入:s = “ac” 输出:“a” Tips 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成 Solution 本题可以采用

weixin_50791900的博客 437

STM32F103RCT6的FLASH读写操作

STM32F103RCT6是一款常用的32位微控制器,它具有内置的FLASH存储器,可以用于存储程序代码和数据。在本文中,我们将详细介绍如何进行STM32F103RCT6的FLASH读写操作,并提供相应的源代码。写入数据时,我们通过将数据直接写入FLASH地址来完成。通过使用适当的API和规则,我们可以有效地读取和写入数据。写入FLASH时,我们需要按特定的规则进行编程。首先,我们需要包含适当的头文件和定义相关的宏和变量,以便在代码中使用FLASH API。类型的指针,我们可以直接读取FLASH中的数据。

UplKubernetes的博客 1034

学Simulink--基础储能管理场景实例:基于Simulink的储能系统恒流-恒压(CC-CV)充电策略仿真

本文详细介绍了基于Simulink的储能系统恒流-恒压(CC-CV)充电策略仿真方法。CC-CV策略通过恒流阶段快速充电(CC阶段)和恒压阶段防过充(CV阶段)的协同控制,实现了充电效率与电池寿命的平衡。文章系统阐述了CC-CV工作原理、控制架构和Simulink建模步骤,包括Thevenin电池模型搭建、阶段切换逻辑实现和动态电流调节。仿真结果显示,该策略能在3.5小时内完成10Ah电池充电,电压超调<2%,SOC跟踪误差0.8%,能量效率96.2%,显著优于纯CC充电策略。最后提出了多阶段扩展、温

amy_mhd的博客 255

力扣5.最长回文子串(java)

力扣5.最长回文子串题目思路代码 LeetCode笔记汇总 题目 给你一个字符串 s,找到 s 中最长的回文子串。 思路 先考虑特殊情况:s为空或者s的长度小于1,此时的s必定不为回文串,直接返回一个空串"" 正常情况下,使用中心扩展算法 如果一个子串是回文串,根据回文串的定义,将其左右两边各去掉一个字母之后仍然为回文串 因此我们可以在已知的回文串两边各再扩展一个字符,如果相等,则仍未回文串 代码 class Solution { public String longestPalindrome(S

k_surge的博客 378

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode5.最长回文子串 JavaScript

LeetCode5.最长回文子串 JavaScript 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” /** * @param {string} s * @return {string} */ ...

weixin_40659167的博客 608

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java力扣LeetCode 5. 最长回文子串

5. 最长回文子串 java力扣LeetCode 给你一个字符串 s,找到 s 中最长的回文子串。 方法一 暴力求解 class Solution { public String longestPalindrome(String s) { String res = null ; int m=0; int flag=0; for(int i = 0;i<s.length(); i++) { for(int j =s.length()-1; j>i;j--)

weixin_43857838的博客 626

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【LeetCode-5】最长回文子串

【LeetCode-5】最长回文子串题目测例思路解题思路易错点代码感想 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 链接:最长回文子串 测例 输入:“babad” 输出:“bab” 注意:“aba” 也是一个有效答案。 思路 解题思路 一看就是个动态规划题,1个字母的时候最大长度是1,两个字母的时候只需要比较他们是否相等,3个字母的时候比较首尾是否相等,4个字母比较首位是否相等,然后再比较中间两个是否相等。而中间两位是否相等在2个字母的时候已经比较过了

qq_40560275的博客 185

LeetCode5.最长回文子串

LeetCode5.最长回文子串 问题 分析 解法一:中心扩散法 顾名思义就是每一个位置中心去扩散,去找回文串,遇到不是回文串的时候结束。 寻找方法就是首先先找其左边和右边位置,如果相等即继续走,只到走到左边的值和右边的值都不和中间元素相等,然后判断左右值是否相等。 解法二:动态规划 ​ 回看中心扩展算法,其实中间做了很多重复的计算,而动态规划就是为了减少重复计算的问题。即以空间换时间,将计算结果暂时存放起来,以避免重复计算 使用boolean dp[l] [r]表示字符串l到r这段是否是回文串,如果

冢狐的私人空间 2379

力扣LeetCode #5 最长回文子串(LongestPalindrome)

- 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 来源:LeetCode(https://leetcode-cn.com/problems/longest-palindromic-substring/) - 示例 示例1 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例2 输入: “cbbd” 输出: “bb” - 思路分析 回文字符串简单理解就是s[i] = s[s.length()-1-i]。比较容易的做法

weixin_49155948的博客 165

C++算法实现 LeetCode 5. 最长回文子串

C++算法实现 LeetCode 5. 最长回文子串   大家好,我叫亓官劼(qí guān jié ),在优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 若需联系博主,可以联系本人微信:qiguanjie2015 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1:

一起加油 1040

golang力扣leetcode 5.最长回文子串

5.最长回文子串5.最长回文子串题解代码 5.最长回文子串 5.最长回文子串 题解 题目:给你一个字符串 s,找到 s 中最长的回文子串 思路: 暴力,两重循环,第一层循环i作为起始,第二层循环j作为结束,判断字符串i到j是否是回文串 中心扩散,遍历字符串,以中心作为回文串中心,判断中心的两边,进行扩散 dp,dp[i][j]为以i开始j结尾的字符串,如果s[i]==s[j],那么dp[i][j]=dp[i+1][j-1],这就是状态转移了,首先要枚举字串长度,再枚举左边界,如果反过来则有些状态是还没有确

清风 1503

【leetcode力扣】PHP实现:5. 最长回文子串

题目: 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 解: class Solution { /** * @param String $s * @return...

allen的博客 879

5. 最长回文子串 - 力扣(LeetCode)

每次找到一个回文子串时,检查其长度是否大于当前记录的最大长度。如果是,则更新最大长度和起始索引。当字符串长度为 1 时,永远是回文串,即。如果两个相邻字符相同,则它们构成一个长度为2的回文子串。根据记录的起始索引和最大长度,返回最长回文子串。的子串(从3到n),遍历所有可能的起始索引。,接着向中间各收缩一位,判断下一位是否相等。,接着向两边各扩张一位,判断下一位是否相等。所有长度为1的子串都是回文,因此初始化。的列表,其中每个元素都被初始化为。的二维列表,每个元素被初始化为。次,每次生成一个新的列表。

q1111111da的博客 471
上一篇: ACM输入输出
下一篇: 总结一下ansys2025 r1安装遇到的问题
throw_flags
博客等级 码龄6年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值