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

面试高频算法:最长回文子串

题目:5. 最长回文子串

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

  • 回文:如果字符串向前和向后读都相同,则它满足回文性;
  • 子串:子字符串 是字符串中连续的非空字符序列。

示例 1:

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

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

解题思路

算法思路是通过遍历字符串中的每个字符或字符对,以它们为中心向两侧扩展,找到最长回文字符串,并记录最大长度和起始位置。最后根据最长回文字符串的起始位置和长度,截取出最长回文子串并返回

实现代码

package leetcodefunc longestPalindrome(s string) string {length := len(s)getLen := func(i, j int) int {// 以s[i]s[j]为中心的最长回文字符串for i >= 0 && j < length {if s[i] == s[j] {i--j++} else {return j - i - 1}}return j - i - 1}max := 0maxStart := 0for i := 0; i < length; i++ {if Max(getLen(i, i+1), getLen(i, i)) > max {max = Max(getLen(i, i+1), getLen(i, i))maxStart = i - (max-1)/2}}maxString := ""for i := maxStart; i < maxStart+max; i++ {maxString += string(s[i])}return maxString
}func Max(i, j int) int {if i >= j {return i}return j
}

复杂度分析

  • 时间复杂度: $ O(n^2) $
  • 空间复杂度: $ O(1) $

单元测试

package leetcodeimport ("testing""github.com/stretchr/testify/assert"
)func Test_longestPalindrome(t *testing.T) {assert := assert.New(t)type args struct {s string}tests := []struct {args argswant string}{{args: args{s: "babad"},want: "bab",},{args: args{s: "cbbd"},want: "bb",},}for _, tt := range tests {actual := longestPalindrome(tt.args.s)assert.Equal(tt.want, actual)}
}
  • 知识星球:云原生AI实战营。10+ 高质量体系课( Go、云原生、AI Infra)、15+ 实战项目,P8 技术专家助你提高技术天花板,入大厂拿高薪;
  • 公众号:令飞编程,分享 Go、云原生、AI Infra 相关技术。回复「资料」免费下载 Go、云原生、AI 等学习资料;
  • 哔哩哔哩:令飞编程 ,分享技术、职场、面经等,并有免费直播课「云原生AI高新就业课」,大厂级项目实战到大厂面试通关;
http://www.xdnf.cn/news/319303.html

相关文章:

  • Webug4.0靶场通关笔记19- 第24关邮箱轰炸
  • 《Python星球日记》 第42天:综合练习与数学建模
  • MVCC机制
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.3 动态报表生成(Jupyter Notebook/ReportLab)
  • 面试题 03.06 动物收容所
  • 如何高效实现「LeetCode25. K 个一组翻转链表」?Java 详细解决方案
  • SENSE2020BSI sCMOS科学级相机主要参数及应用场景
  • Azure OpenAI 聊天功能全解析:Java 开发者指南
  • 本地部署 MySQL + Qwen3-1.5B + Flask + Dify 工作流
  • 滑动窗口——长度最小子数组
  • var、let、const的区别
  • 高并发内存池(一):项目简介+定长内存池的实现
  • ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
  • MySQL 8.0 OCP(1Z0-908)英文题库(1-10)
  • PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)
  • 【RabbitMQ可靠性原理】
  • 亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
  • YOLOv8的Python基础--函数篇2
  • WordPress:Locoy.php火车头采集
  • 【HTTP】《HTTP 全原理解析:从请求到响应的奇妙之旅》
  • 【MongoDB篇】MongoDB的副本集操作!
  • 数据清洗-电商双11美妆数据分析(二)
  • 5G赋能农业物联网:智能化种植的新纪元
  • JavaWeb:MySQL进阶
  • 趣味编程:梦幻万花筒
  • DBa作业
  • MCP认证全解析:从零到微软认证专家
  • (eNSP)策略路由实验配置
  • Selenium Web自动化测试学习笔记(二)--八大元素定位
  • 详细剖析传输层协议(TCP和UDP)