【leetcode--golang】5. 最长回文子串

Leetcode解题之路(golang版):5. 最长回文子串(Longest Palindromic Substring) 5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 解法一: 中心扩散法 空间复杂度:$O(1)$ 时间复杂度:$O(n2)$ func longestPalindrome(s string... 阅读详情

题目

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

示例

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

解决方案

方法一、动态规划
我们首先观察如何避免在验证回文时进行不必要的重复计算。考虑“ababa” 这个示例。如果我们已经知道“bab” 是回文,那么很明显,ababa” 一定是回文,因为它的左首字母和右尾字母是相同的。我们给出 P(i,j) 的定义如下:
在这里插入图片描述
因此,P(i, j) = ( P(i+1, j-1) and S(i) == S(j) )
基本示例如下:
P(i, i) = trueP(i,i)=true
P(i, i+1) = ( S(i) == S(i+1) )
这产生了一个直观的动态规划解法,我们首先初始化一字母和二字母的回文,然后找到所有三字母回文,并依此类推…复杂度分析时间复杂度:O(n^2), 这里给出我们的运行时间复杂度为 O(n^2) 。空间复杂度:O(n^2), 该方法使用 O(n^2) 的空间来存储表。

方法二:中心扩展算法
事实上只需使用恒定的空间,我们就可以在 O(n^2) 的时间内解决这个问题。我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n - 1 个这样的中心。你可能会问,为什么会是 2n - 1个,而不是 n个中心?原因在于所含字母数为偶数的回文的中心可以处于两字母之间“abba” 的中心在两个‘b’之间)。

func longestPalindrome(s string) string {
    //    odd number
    n := len(s)
    if n == 0 {
        return ""
    }
    if n == 1 {
        return s
    }

    var res1, res2 int
    var tmp1, tmp2 int
    var str1, str2 string

    for i := 0; i < n-1; i++ {
        tmp1 = 1
        l1 := i - 1
        r1 := i + 1
        for {
            //            fmt.Println("##i=%d", i)
            if l1 >= 0 && r1 <= n-1 {
                //                fmt.Println("s[l1]=%v, s[i]=%v, s[r1]=%v", string(s[l1]), string(s[i]), string(s[r1]))
                if s[l1] == s[r1] {
                    tmp1 += 2
                    l1--
                    r1++
                } else {
                    break
                }
            } else {
                break
            }

        }

        if tmp1 > res1 {
            str1 = s[l1+1 : r1]
            res1 = tmp1
        }
        //        fmt.Printf("##str1=%s\n\n", str1)
    }

    //    even number
    for j := 0; j < n-1; j++ {
        tmp2 = 0
        l2 := j
        r2 := j + 1
        for {
            //            fmt.Println("##j=%d", j)
            if l2 >= 0 && r2 <= n-1 {
                //                fmt.Printf("l2=%d, r2=%d\n", l2, r2)
                //                fmt.Println("s[l2]=%v, s[r2]=%v", string(s[l2]), string(s[r2]))
                if s[l2] == s[r2] {
                    tmp2 += 2
                    l2--
                    r2++
                } else {
                    break
                }

            } else {
                break
            }
        }
        if tmp2 > res2 {
            str2 = s[l2+1 : r2]
            res2 = tmp2
        }
        //        fmt.Printf("##str2=%s\n\n", str2)
    }

    //    fmt.Printf("##res1=%d, res2=%d\n\n", res1, res2)
    if res2 > res1 {
        return str2
    }

    return str1
}

复杂度分析

  • 时间复杂度:O(n^2), 由于围绕中心来扩展回文会耗去 O(n) 的时间,所以总的复杂度为 O(n^2)。
  • 空间复杂度:O(1)。
unity中简单全景搭建 全景场景能够直观的展现一部分区域的全貌,在全景场景中我们能360°观看周围的景象,仿佛自身就在这个场景中,在场景的外部,我们能发现场景就是一个密封的球体,我们是处在球体的内部观察周围,在球内部观察四周看到的都是球的内表面,所以我们看到的全景其实就是贴在密封球体内的一张全景图片。接下来要介绍的就是如何在unity中用一个球体来搭建全景场景。 阅读详情

相关推荐

S32K3实战:手把手教你用eMIOS模块实现电机PWM控制(附代码)

本文详细解析了NXP S32K3系列MCU的eMIOS模块在电机PWM控制中的应用,从硬件设计到软件实现,再到调试与优化,提供了完整的实战指南。通过eMIOS模块的硬件级PWM生成能力,工程师可以实现高精度的电机控制,适用于汽车电子和工业控制领域。

weixin_42570484的博客 147

【LeetCode】5. 最长回文子串 - Go 语言题解

文章目录一、题目描述二、我的题解1. 两端向中间遍历法2. 后缀遍历法3. 建立哈希表,遍历位置切片 一、题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 二、我的题解 1. 两端向中间遍历法 设置两个指针 i , j:i 从串头开始遍历,j

weixin_44211968的博客 768

EXCEL实现分层自定义比例随机抽样(图+文教程)

EXCEL实现分层自定义比例随机抽样(图+文教程) 单一字段分层自定义比例随机抽样 多字段分层自定义比例随机抽样 单一字段分层自定义比例随机抽样 首先数据源如下,我们想随机抽张三的金额数据10%、李四金额20%、王五5%、哈哈15%、李六10% 首先第一步,添加辅助列,随机数 =RAND() 对数据进行高级排序 升序、降序都可以 添加辅助列...

可乐联盟 2万+

【leetcode】最长回文子串 C++/Go(中心扩散法+动态规划)

题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 中心扩散法 直接两张图就能够解释,如下是两种情况: 第一种: 由中间一个字符向左右两边进行扩散,当左右两端的字符相等时,继续扩散,否则停止,得到当前最长的回文子串。 第二种: 由中间的2个字符向左右两边进行扩散,当左右两端的字符相等时,继续扩散,否则停止,得到当前最长的回文子串。

Redisread的博客 589

opencode完整使用指南:从安装配置到Agent式编程实战

AI编程工具正从辅助补全向智能体协作演进。编程智能体不仅理解项目全局,还能自主执行原子级重构、测试验证等工程任务,显著提升研发效能。以opencode为代表的开源终端AI编程工具,凭本地优先和灵活模型接入成为技术团队新宠。本文围绕opencode的完整使用链路展开,从Node.js环境准备、npm全局安装,到解决Windows环境变量配置问题,再到接入OpenAI、Anthropic或多模型管理平台,梳理一套标准化接入方案。同时演示VSCode插件调用、LSP语义分析及Playwright驱动的浏览器自动化

weixin_28837817的博客 319

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4704

golang刷leetcode---5.最长回文子串

一、题目描述: 给定一个字符串s,找到s中最长的回文子串。可以假设s的最大长度为1000。 示例1: 输入:“babad” 输出:“bab” 注意:"aba"也是一个有效答案 示例2: 输入: “cbbd” 输出: “bb” 二、解题思路: 回文串:从左向右读和从右向左读都一样的字符串.回文串有轴对称的特点. 子串:是原始字符串的一个连续的子集; 子序列:原始字符串的一个子集. 对于一个子串而言,如果它是回文串,并且长度大于2,那么将它首尾的两个字母去除之后,它仍然是个回文串.例如对于字符串"ab

lili9415的博客 609

Claude Desktop新功能:让非技术人士也能自主编程

摘要: Anthropic近日在Claude桌面应用中集成了Claude Code功能,显著降低了非技术用户的使用门槛。Claude Code作为代理式编程工具,支持多任务并行处理、Git隔离和可视化会话管理,无需命令行操作即可实现代码调试、重构等复杂任务。新增的“计划模式”通过先分析后执行的流程,确保安全性,使产品经理、数据分析师等非开发者也能参与技术工作。这一更新标志着AI技术正打破专业壁垒,让领域专家无需编码背景即可利用高级工具,推动技术民主化。

独立开发,substack顶级编辑 1540

LeetCode5.最长回文子串---Golang

【代码】LeetCode5.最长回文子串---Golang。

u9king的博客 243

探索数据库领域 SQL 的 JSON 数据处理技巧

在当今数字化时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种领域,如 Web 应用、移动应用、大数据处理等。数据库作为数据存储和管理的核心,需要具备处理 JSON 数据的能力。本文章的目的在于深入探索 SQL 语言在数据库中处理 JSON 数据的技巧,涵盖从基础的 JSON 数据查询到复杂的 JSON 数据操作,帮助读者全面了解和掌握 SQL 处理 JSON 数据的方法。

2502_91592937的博客 924

YOLOv13改进策略【注意力机制篇】| ICASSP 2023 EMA 高效多尺度注意力,跨空间学习提高远距离建模依赖

ICASSP 2023 EMA 高效多尺度注意力在 YOLOv13 的接入实战:跨空间学习提升远距离依赖建模,含原理图解、完整代码、yaml 配置与实测参数量对比(ultralytics 8.3.63)。

qq_53329130的博客 934

力扣 || 5.最长回文子串--Golang

方法:中心扩展法 中心扩展法,子串分为奇数和偶数,要分开进行讨论,选择一个中心位置,逐渐比较两边的值,因为求最长,免不了比较max,因此,每次求出最长子串需要和之前的比较,然后重新记录下标,偶数时类似,需要注意的时,中心位置应该保持不变在一次循环中,i和j的其实位置奇数和偶数应该是相同的。 Golang: func longestPalindrome(s string) string { // ...

Guo的博客 406

用 CL_ABAP_PARALLEL 把批量处理跑进并行对话进程:资源配额、超时治理与可复制的落地模板

文章摘要: CL_ABAP_PARALLEL是SAP推荐的并行处理工具,适用于时间窗口受限的批量任务处理。它基于aRFC/pRFC机制,通过对话进程实现并行,能将小时级任务压缩到分钟级。使用时需注意版本兼容性(可能需要Note 2791374)、资源限制(会话数、进程数)和任务切片策略。提供两种实现方式:继承式(重定义do方法)和接口式(实现IF_ABAP_PARALLEL)。关键参数包括并发控制(p_percentage)、超时设置(p_timeout)和调试开关(p_debug)。最佳实践建议按业务维度

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 243

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[LeetCode][Golang] 5. 最长回文子串

题目: 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 题解: 首先我们使用中心扩展法解决,先贴代码(Go): func longestPalindrome(s string) string { n := len(s) if n < 2 { return s } begin, end := 0, 0 //

DecXu 629

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【LeetCode 热题100】字符串 DP 三连:最长回文子串、最长公共子序列 & 编辑距离(力扣5 / 1143/ )(Go语言版)

本文详细解析了字符串动态规划(DP)领域的三个经典问题:**最长回文子串**(LeetCode 5)、**最长公共子序列**(LeetCode 1143)和**编辑距离**(LeetCode 72)。通过定义状态、推导状态转移方程,结合 Go 语言实现代码,深入浅出地讲解了解题思路。从判断子串是否为回文到求解两个字符串的匹配长度,再到计算字符串转换的最小操作数,每道题都展示了 DP 的核心思想与应用场景。最后通过表格总结对比三题的异同,帮助读者更好地掌握字符串 DP 的解题技巧。

小韩的博客 929

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Golang】LeetCode 5. 最长回文子串

基于 Golang 解决 LeetCode 5. 最长回文子串。思路是二维动态规划。

YGGP的博客 322

[算法] leetcode golang 5. 最长回文子串多种解法

[算法] leetcode golang 5. 最长回文子串多种解法 思路1: 暴力 //思路1: 暴力O(n3)(超过5%) //遍历子字符串O(n2) //然后判断是否是回文O(n),记录最大的字字符串 func longestPalindrome(s string) string { //参数处理 if len(s) < 2 { return s } //记录最大子字符串 maxStr := "" //遍历子字符串 fo

半亩方糖 564

leetcode 5.最长回文子串 golang实现

描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 思路 动态规划 dp[i][j] 表示从第i个索引到第j个索引 回文子串的长度 1. 如果i = j 则此串一定是回文 2. 如果i + 1 = j ...

tzh_linux的专栏 333

LeetCode-Golang之【5. 最长回文子串】

GO-最长回文子串

liuqun of program life 621

LeetCode Golang 5. 最长回文子串

5. 最长回文子串 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 暴力解法: 列出子串, 求出符合条件的子串存入map, 筛选出最大值存入 func longestPalindro...

weixin_30919571的博客 182

最长回文子串_Go语言实现LeetCode算法:5 最长回文子串

Go语言中文网,致力于每日分享编码、开源等知识,欢迎关注我,会有意想不到的收获!1 题目描述对给定字符串s,找出其最长回文子串(假定s的最大长度为1000)。例子1:输入:"babad"输出:"bab"释义:"aba"同样是一个有效答案例子2:输入:"cbbd"输出:"bb"例子3:输入:"cbbc"输出:"cbbc"题目出处:https://leetcode.com/problems/longe...

weixin_39559486的博客 139

leetcode | go | 第5题 | 最长回文子串

【代码】leetcode | go | 第5题 | 最长回文子串。

iCling的博客 176

Golang | Leetcode Golang题解之第5题最长回文子串

Golang | Leetcode Golang题解之第5题最长回文子串

weixin_66442839的博客 535

leetcode算法题—golang—最长回文子串(题5)

题目:最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 方法一  时间复杂度O(n^3) func longestPalindrome(s string) string { ...

墨怀旧 1390

【力扣5.最长回文子串】多种解法:动态规划+中心扩散(golang)

目录题目描述思路题解动态规划法中心扩散法 题目描述 https://leetcode-cn.com/problems/longest-palindromic-substring/ 思路题解 https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/的方法一、二 动态规划法 带剪枝自敲代码: func longestPalindr

戴某某 479
上一篇: 【leetcode--golang】3. 无重复字符的最长子串
下一篇: 【leetcode--golang】7. 整数反转
cbmljs
博客等级 码龄10年 329粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值