最长回文串之中心扩散法

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容 分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的... 阅读详情

最长回文串之中心扩散法


题目描述

leetcode

5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

算法思想

    比如回文串:“aba”、 “aa”,我们可以观察到它两边是互为镜像的,那我们就可以从回文字符串的中心字符开始向两边扩散,获取到以此位置为中心的字符串长度。

    但奇数串和偶数串的中心位置是不一样的,如"aba"中心位置是1,而"aa"是处于两字符之间。

    Python3的大致代码如下:

class Solution:
    def longestPalindrome(self, s: str) -> str:
    	# 如果字符串是“”,“a“,之类的直接返回即可
        if len(s) < 2:
            return s

        # 定义最长字符串的初始左右边界    
        left = 0
        right = 0

        # 从第一个字符开始以它为中心向两边扩散
        for i in range(0, len(s)):
        	# 奇数情况下的回文长度
            len1 = self.expandAroundCenter(s, i, i)
            # 偶数情况下的回文长度
            len2 = self.expandAroundCenter(s, i, i + 1)
            # 取最大回文长度
            len3 = max(len1, len2)
            # 更新左右边界值
            if len3 > right - left:
                left = i - int((len3 - 1) / 2)
                right = i + int(len3 / 2)
        print(left, right+1)
        return s[left:right+1]

    def expandAroundCenter(self, s: str, left: int, right: int) -> int:
    	# 返回当前字符向两边扩散的回文串长度
        l = left
        r = right
        while l >= 0 and r < len(s) and s[l] == s[r]:
            l = l - 1
            r = r + 1
        return r - l - 1


if __name__ == "__main__":
    s = Solution()
    assert s.longestPalindrome("babad") == "bab" or s.longestPalindrome("babad") == "aba"
    assert s.longestPalindrome("cbb") == "bb"
    param = "kyyrjtdplseovzwjkykrjwhxquwxsfsorjiumvxjhjmgeueafubtonhlerrgsgohfosqssmizcuqryqomsipovhhodpfyudtusjhonlqabhxfahfcjqxyckycstcqwxvicwkjeuboerkmjshfgiglceycmycadpnvoeaurqatesivajoqdilynbcihnidbizwkuaoegmytopzdmvvoewvhebqzskseeubnretjgnmyjwwgcooytfojeuzcuyhsznbcaiqpwcyusyyywqmmvqzvvceylnuwcbxybhqpvjumzomnabrjgcfaabqmiotlfojnyuolostmtacbwmwlqdfkbfikusuqtupdwdrjwqmuudbcvtpieiwteqbeyfyqejglmxofdjksqmzeugwvuniaxdrunyunnqpbnfbgqemvamaxuhjbyzqmhalrprhnindrkbopwbwsjeqrmyqipnqvjqzpjalqyfvaavyhytetllzupxjwozdfpmjhjlrnitnjgapzrakcqahaqetwllaaiadalmxgvpawqpgecojxfvcgxsbrldktufdrogkogbltcezflyctklpqrjymqzyzmtlssnavzcquytcskcnjzzrytsvawkavzboncxlhqfiofuohehaygxidxsofhmhzygklliovnwqbwwiiyarxtoihvjkdrzqsnmhdtdlpckuayhtfyirnhkrhbrwkdymjrjklonyggqnxhfvtkqxoicakzsxmgczpwhpkzcntkcwhkdkxvfnjbvjjoumczjyvdgkfukfuldolqnauvoyhoheoqvpwoisniv"
    assert s.longestPalindrome(param) == "qahaq"
芒果YOLO11改进22:检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份 检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份 阅读详情

相关推荐

若依开源框架(分离版)在人大金仓数据库下使用

对于甲方业务特殊要求,使用国产化数据库人大金仓,作为项目主要存储。这里以若依开源框架整合人大金仓为例,演示如何在真实项目中引入人大金仓。

🐱喵测实验室 5941

一文多图讲清楚解决最长回文子串问题的【中心扩展算法】与【Manacher算法】

图解中心扩展算法、Manacher算法

weixin_54383080的博客 2073

解决fetch_california_housing数据集403错误的三种实用方法

本文针对机器学习初学者加载fetch_california_housing数据集时常见的HTTPError 403: Forbidden错误,提供了三种经过实测的解决方案。详细介绍了手动下载与本地替换、修改源码下载路径以及配置网络访问策略的具体步骤,帮助用户根据自身网络环境和开发场景选择最佳方法,确保数据集顺利加载。

weixin_29074295的博客 547

处理最长回文字符子串--中心扩散法

处理最长回文字符子串--中心扩散法

mililala的博客 433

TI IWR6843AOP雷达+DCA1000EVM数据采集:官方手册里的坑,我帮你踩完了

本文详细解析了TI IWR6843AOP雷达与DCA1000EVM数据采集实战中的12个关键细节,包括硬件连接陷阱、mmWave Studio隐藏设置、数据采集参数优化等,帮助开发者避开官方手册未提及的常见问题,提升数据采集效率和系统稳定性。

weixin_28366475的博客 1102

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。 那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

努力前行,总会成为自己心中的那道光 6万+

求最长回文子串中心扩散法、Manacher、动态规划

关于求解最长回文子串问题前言一、中心扩散法?二、动态规划法三、Manacher求回文子串总结 前言 求一个字符串中的最长回文子串问题,有很多方法。我弄懂了三种,在这里和大家分享 一、中心扩散法? 中心扩散法是一个解决回文子串非常好用的方法。该方法的思想是将字符串从某个位置向左右扩散,只要左右对称位置的字符相同就可以一直扩散,知道不同停止,从左至右,扩散的下标之差就是该位置能得到的最大回文子串。 举个例子: 如图所示,称这个字符串为arr,从下标为3的6字符向左右扩散,arr[2]==arr[4],ar

qq_39320046的博客 662

关于Sybase ASE数据库的license以及试用版过期的问题的解决方案

当用户从Sybase官网上下载了ASE15.0.2以后,如果选择了安装Express Edition或者Developer Edition,基本上不会碰到什么问题,除了有些功能受限以下。 但大多数可能选择了Enterprise Edition for Evaluation类型,即企业版试用。都会碰到这样的问题,即一个月以后,license过期,无法启动server。于是很郁闷,可能大部分人,会选...

iihero@优快云 789

LeetCode_5. 最长回文子串(动态规划\中心扩散)

思路 一、动态规划 首先确定dp数组:dp数组为一个二维的布尔类型数组,dp[i][j]代表字符串中第i位到第j位是否为一个回文串,如果是则为true,不是则为false 确定状态转换方程: 首先如果字符串第 i 位和第 j 位不是同一个字符,很明显就不是一个回文串 如果字符串第 i 位和第 j 位字符相同,则又可以分为三种情况: 情况一:下标 i 与 j 相同,同一个字符例如a,当然是回文子串 情况二:下标 i 与 j 相差距离为1,例如aa,也是文子串 情况三:下标:i 与 j相差大于1的时候,.

Amxrjgcs的博客 204

数据资产可视化分析:PowerBI在大数据管理中的实战

目的:帮你搞懂“为什么数据资产需要可视化?”“PowerBI能帮企业解决什么问题?”,并掌握用PowerBI做大数据可视化的实战技巧。范围:覆盖数据资产定义、可视化分析原理、PowerBI核心功能(数据连接、建模、可视化)、零售企业实战案例,以及未来趋势与挑战。背景:为什么企业的数据像乱堆的玩具?核心概念:数据资产、可视化分析、PowerBI分别是什么?它们怎么配合?实战步骤:用PowerBI帮零售企业整理“销售玩具箱”,做出能指导决策的仪表盘;应用场景:不同部门怎么用这个“整理好的玩具箱”?

2501_92132293的博客 906

【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装

本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显

Mr数据杨 1582

力扣(LeetCode)-05-最长回文子串-中心扩散法

针对力扣题目05-最长回文子串提供了一个较为简洁的中心扩散法

weixin_46291422的博客 372

【技能】OpenClaw Memory 与 MemOS 两种 AI 记忆方案深度解析

摘要:本文对比了两种AI记忆系统方案。OpenClaw Memory是轻量级记忆助手,内置SQLite存储,支持语义搜索,部署简单成本低,适合日常对话记忆需求。MemOS是自学习系统,通过Neo4j和Qdrant实现技能自进化,但需部署4套服务,门槛高成本大。建议普通用户选择OpenClaw Memory,技术玩家可逐步尝试MemOS。两种方案各具优势,需根据实际需求选择。

海兰 195

通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)

1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba、bbaabb。这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的字符数是偶数。前面举的abcdcba就是奇回文,bbaabb就是偶回文。判断一个字符串是否是回文串很简单,只要从字符串的两端开始往中间扫描,全部匹配成功则是回文串,只要有一次匹配失败,那么就不是回文串。代码如下 // 没有对字符串为null或者空串的返回值进行考虑 static boolean Palin

走过路过不要错过 1127

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

1. 回文串作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba、bbaabb。这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的字符数是偶数。前面举的abcdcba就是奇回文,bbaabb就是偶回文。判断一个字符串是否是回文串很简单,只要从字符串的两端开始往中间扫描,全部匹配成功则是回文串,只要有一次匹配失败,那么就不是回文串。...

weixin_27130513的博客 619

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最长回文串简单易懂的中心扩散法代码

【代码】最长回文串简单易懂的中心扩散法代码。

非零窝 149

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

最长回文子串(Leetcode-5)-中心扩散法(回文串)

题目 原题连接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 知识点 中心扩散法(针对回文串) 思路 对于一个子串而言,如果它是回文串,并且长度大于 2,那么将首尾的两个字母去掉以后,它仍然是个回文串。例如对于字符串“acbca”,去掉首位的“a”以后,“cbc”仍然是回文串。 我们可以从上述的例子中看出,我们选取某个元素i,从中心分别往两侧去扩散,直到两侧不一致为止,那么我们就可以获得以i元素为中心的最大回文串。

KKWriedy的博客 409

最长回文串的中心扩散法

【代码】最长回文串的中心扩散法。

2303_81628694的博客 232

lecode5-最长回文串 中心扩散法-7ms

我发现算法进步的阻力很多时候都是畏难心理,最近在学习动态规划,这道题我虽然用暴力解法做出来了,但是我需要学习的是动态规划解法,冗长的官方题解让我产生了畏难心理,但是最后我还是硬着头皮学下去,最后写出了中心扩散法,特别开心,感受到了学习算法的快乐,遂有了这篇文章。

2203_76027318的博客 453

回文串

1.1. 最长回文串 LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。注 意:假设字符串的长度不会超过 1010。 回文串:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。——百度百科 地址:https://baike.baid...

qq_40180411的博客 1万+

longestPalindrome 最长回文串

/* *中心扩散法: * 如果中心字符串s是回文,那么以中心对称的字符串向左右两边扩展s1,如果左右两边 * 字符关于中心对称,那么s1也是回文,遍历所有中心点,重复上述过程,找到最长回文 * 子串。 * 中心对称分两种情况,奇数个字符以某个字母对称;偶数个字符以中间两个字符对称 * 时间复杂度:O(n^2) 空间复杂度:O(1) */ #include #in

outlier的博客 709

LeetCode 5 最长回文子串

双11打卡力扣

hewesH的博客 4016

数据结构与算法 -- 中心扩散法

什么是中心扩散法? 中心扩散法,顾名思义就是以某一个位置为中心,向周围扩散,直到满足条件或到达边界。 Leetcode 5.最长回文子串 题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1:输入: "babad",输出: "bab",注意: "aba" 也是一个有效答案。 示例 2:输入: "cbbd",输出: "...

weixin_30920513的博客 1344

回文串问题一网打尽

1.. 最长回文子串 对应letecode链接: https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 示例 3: 输入:s = "a" 输出:"a" 示例 4: 输入:s = "ac" 输出.

qq_56999918的博客 1784

【leetcode】回文子串、最长回文子串、最长回文子序列、最长回文串

中等给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。算法思路推荐看代码随想录(

SAVSORRY的博客 1784

刷题总结--最长回文子串(中心扩散法和动态规划)

文章目录题目:中心扩散法动态规划 题目: 中心扩散法 我们的暴力解法可能是通过枚举每个子串来判断是否为回文串,然后更新答案,那样一定会有O(n^3)的时间复杂度。 我们换一种角度思考,由于回文串总会有一个中心对称点,这个地方可以是一个数也可以是两个数,如回文串为奇数长则中心为一个字符,回文串为偶数长则中心为两个字符。 通过以上思路可以开始实施我们的中心扩散法。 我们枚举每个回文子串的中心字符,然后通过该字符扩散,不断更新得到最长的那个,而后根据 i 和 len 得到begin。 效率还行 代码

CppYyds的博客 580
上一篇: C Linux 多线程入门
下一篇: Windows下JetBrains CLion的pthread使用配置
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值