当前位置: 首页 > article >正文

算法--最长回文子串

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

示例 1:

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

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

看似困难,实则一点也不简单

方法:中心扩展法(Expand Around Center)

思路:
回文字符串具有对称性,因此我们可以以每个字符为中心,向两边扩展,找到最长的回文子串。需要注意的是,回文可能是奇数长度或偶数长度。

步骤:

  1. 遍历字符串中的每个字符。
  2. 对于每个字符,分别以奇数长度和偶数长度为中心进行扩展。
  3. 记录最长的回文子串。
func longestPalindrome(s string) string {
    if len(s) == 0 {
        return ""
    }
    var maxLen int 
    var start int 
    for i:=0;i<len(s);i++{
        //奇数长度的回文
        l,r := i,i 
        for l>=0 && r<len(s) && s[l] == s[r] {
            if r-l+1>maxLen {
                maxLen = r-l+1
                start = l 
            }
            l--
            r++
        }
        // 偶数长度的回文
        l,r = i,i+1
        for l>= 0 && r < len(s) && s[l] == s[r] {
            if r-l+1 > maxLen {
                maxLen = r-l+1
                start =l 
            }
            l--
            r++
        }
    }
    return s[start:start+maxLen]
}

解释:

  • 首先检查字符串是否为空,如果是则返回空字符串。
  • 初始化 maxLen 为最大回文长度,start 为最长回文子串的起始位置。
  • 遍历字符串中的每个字符 i
    • 对于奇数长度的回文,以 i 为中心向两边扩展。
    • 对于偶数长度的回文,以 ii+1 为中心向两边扩展。
  • 在每次扩展中,如果当前回文长度大于 maxLen,则更新 maxLenstart
  • 最后返回最长回文子串。

http://www.kler.cn/a/534298.html

相关文章:

  • 今日AI和商界事件(2025-02-05)
  • Eureka加密 及Gateway搭建 - 基于SpringBoot不同版本配置方式
  • Immutable设计 SimpleDateFormat DateTimeFormatter
  • 线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字
  • 算法随笔_39: 最多能完成排序的块_方法2
  • uniapp小程序自定义中间凸起样式底部tabbar
  • Github 2025-02-05 C开源项目日报 Top9
  • 堆(Heap)的原理与C++实现
  • Java 大视界 -- Java 大数据在智能安防中的应用与创新(73)
  • NacosRce到docker逃逸实战
  • vulnhub DC-3
  • 一文解释pytorch 中的 squeeze() 和 unsqueeze()函数(全网最详细版)
  • Docker基础以及单体实战
  • Node.js 与 PostgreSQL 集成:深入 pg 模块的应用与实践
  • 基于Ceph14对接openstack的Nova、Glance、Cinder服务为后端存储
  • [权限提升] Linux 提权 — 系统内核溢出漏洞提权
  • linux常用基础命令 最新
  • Java 微服务实用指南(一)
  • Node.js学习指南
  • 18爬虫:关于playwright相关内容的学习
  • ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景
  • 教育邮箱免费使用Notion专业版,还能免费使用Azure和OpenAI!
  • [Leetcode]求最长公共前缀
  • Linux 安装 RabbitMQ
  • 高级java每日一道面试题-2025年01月28日-框架篇[SpringBoot篇]-如何使用Spring Boot实现异常处理?
  • 按月拆分工作表,报表清晰没烦恼-Excel易用宝