尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
回文字串---开始刷题1
首先明确“回文”串 是什么:是一个字符串在正读和反读时完全相同。也就是把这个字符串从中间对折左右两边的字符能够完全重合。数学定义对于一个长度为n的字符串S如果对于所有的 0in,都满足s[i] s[n-1-i],那么该字符串就是回文串。一些示例类型示例说明单词/字母madam,racecar,level忽略大小写后正反读一致数字串12321,1221,666数字序列对称中文上海自来水来自海上汉字序列对称特殊a,aa,(空串)单个字符和空串也被视为回文回文串通常考察1、双指针技巧使用头尾两个指针向中间逼近来判断是否为回文时间复杂度O(n),空间复杂度O1。2、动态规划解决“最长回文子串”、“回文子串计数”等问题。3、字符串哈希/Manacher算法用于在O(n)时间内高效查找所有回文子串。4、递归与分治判断回文本身具有天然的递归结构。力扣题---解决寻找最长回文子串问题第一步先用人脑模拟一下每个子串都有一个中心可以使用中心扩展法对于“babad”:以b索引0为中心向两边扩-》只有b自己长度1以a索引1为中心向两边扩-》b-a-b ;长度3以b索引2为中心向两边扩-》a-b-a;长度3以a索引3为中心向两边扩-》b-a-d不是回文串只有a自己以d索引4为中心向两边扩-》只有d关键洞察每个回文串一定有一个“中心”。我们只需要枚举每一个可能的中心然后向两边扩展记录最长的即可。但是需要注意回文可能是奇数长度aba中心是一个字符也可能是偶数长度如bb,中心是两个字符之间的缝隙。所以每个位置要尝试两种中心。先判断的是否相等然后再进行的-1 ,两边都进行了-1 因此都是多走了一步需要用right-left-1得到的就是长度使用这种扩展中心法来先写代码正确的验证可通过的代码func longestPalindrome(s string) string { if len(s)0{ return } start , maxLen : 0,1 //记录最长回文的起始位置和长度 //expandAroundCenter 从给定的左右中心向两边扩展返回回文长度 expandAroundCenter : func(left,right int)int { for left 0 right len(s)s[left]s[right] { left-- right } //循环结束时 left 和 right 各自走了一步 return right - left -1 } for i : 0 ; i len(s) ; i { // 情况1奇数长度回文中心是s[i] oddLen : expandAroundCenter(i,i) //情况2偶数长度回文中心是s[i] 和 s[i1]之间 evenLen : expandAroundCenter(i,i1) //取两者较大值 curLen : oddLen if evenLen curLen { curLen evenLen } // 更新全局最优 if curLen maxLen{ maxLen curLen start i -(maxLen-1)/2 //推导中心i向左偏移len-1/2 } } return s[start:startmaxLen] }正确运行的结果这部分代码是我根据梳理完思路后自己又写了一遍有一些错误的点func lenlongStr (s string )string{ if len(s)0{ return } // 计算回文串长度方案 exelenStr : func (left,right) int { for left 0 right len(s) s[left]s[right] { left-- rigth } ruturn right -left -1 // 两个都有多走一步因为先进行的相等判断直接向下各走一步 } start , maxlen : 0,1 // 用来获取最后要输出的串以及获取最大的长度的回文串 for i : 0 ; i len(s) ;i{ //回文串是奇数中心为i oddlen : exelenStr(i,i) // 回文串是偶数中心为i 和i1 explen : exelenStr(i,i1) //设置一个变量获取两种中心串的最大值 curlen : oddlen if explen curlen{ curlen : explen } //再去实际的赋值到 maxlen 这个最大值 上 if curlen maxlen{ maxlen : curlen start : i - (maxlen-1)/2 //起始值距离 i ,用i这个中心减去长度的一半 } } ruturn s[start,startmaxlen] }在这里纠正相关的错误点直接让ai检查的你这次自己默写的代码非常有价值虽然报错很多但核心逻辑中心扩展法你已经完全掌握了这说明你的思路是正确的。现在的问题纯粹是Go 语言语法细节和变量作用域的坑。对于新手来说这些都是必经之路。我帮你把问题逐一拆解 错误清单与修复1. 函数参数必须声明类型你的代码func (left,right) int {问题Go 是强类型语言闭包函数的参数也必须写明类型。修复func(left, right int) int {2. 边界条件少了一个等号⚠️ 逻辑 Bug你的代码for left 0 ...问题如果回文串刚好从索引0开始比如abaleft减到0时left 0为假循环提前退出导致漏掉首字符。修复必须是left 0。3. 拼写错误三连rigth→ 应为rightruturn→ 应为return出现了两次lenlongStr→ 题目要求的函数名是longestPalindromeLeetCode 会因找不到入口函数而报错4. 变量作用域陷阱⚠️ 最隐蔽的 Bug这是新手在 Go 中最容易踩的坑// ❌ 你的代码 if explen curlen { curlen : explen // 这里用 : 创建了一个新的局部变量 } // 出了 if 块这个新 curlen 就消失了 // 外面的 curlen 依然是 oddlen if curlen maxlen { maxlen : curlen // 同样的问题创建了新的局部 maxlen start : i - (maxlen-1)/2 // 创建了新的局部 start } // 外层的 start 和 maxlen 从未被更新规则:是短变量声明会在当前块级作用域创建新变量。如果你只是想赋值给外层已有的变量必须用。修复if explen curlen { curlen explen // ✅ 用 赋值 } if curlen maxlen { maxlen curlen // ✅ 用 赋值 start i - (maxlen-1)/2 // ✅ 用 赋值 }✅ 修正后的完整代码func longestPalindrome(s string) string { if len(s) 0 { return } // 1. 参数加类型2. left 03. right 拼写正确 exelenStr : func(left, right int) int { for left 0 right len(s) s[left] s[right] { left-- right } return right - left - 1 // ruturn → return } start, maxlen : 0, 1 for i : 0; i len(s); i { oddlen : exelenStr(i, i) explen : exelenStr(i, i1) curlen : oddlen if explen curlen { curlen explen // ✅ : 改为 } if curlen maxlen { maxlen curlen // ✅ : 改为 start i - (maxlen-1)/2 // ✅ : 改为 } } return s[start : startmaxlen] // ruturn → return切片语法用冒号 } 给你的学习建议关于:vs这是 Go 新手第一道坎。记住口诀第一次出现用:后续修改用。在if/for块内修改外层变量时永远只用。不要气馁你第一次独立默写就能把中心扩展法的框架、奇偶双中心、长度计算公式全部写对这比很多刷了几十题的人还强。剩下的只是语法熟练度问题。下一步练习把修正后的代码再删掉凭记忆重写一遍。这次重点关注、和拼写。当你能一次性无错写出来时这道题就真正属于你了。你已经走在正确的路上了继续加油加油加油今天就先到这里了
RELATED

相关推荐

【计算机大数据毕业设计案例】基于 Django 大数据的旅游路线优化推荐系统的设计与实现 基于时序旅游数据的出游趋势分析推荐系统(程序+文档+讲解+定制)

【计算机大数据毕业设计案例】基于 Django 大数据的旅游路线优化推荐系统的设计与实现 基于时序旅游数据的出游趋势分析推荐系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

📅 2026/8/2 3:40:30
Linux动态壁纸革命:告别静态桌面,拥抱沉浸式视觉体验

Linux动态壁纸革命:告别静态桌面,拥抱沉浸式视觉体验

Linux动态壁纸革命:告别静态桌面,拥抱沉浸式视觉体验 【免费下载链接】linux-wallpaperengine Wallpaper Engine backgrounds for Linux! 项目地址: https://gitcode.com/gh_mirrors/li/linux-wallpaperengine 厌倦了Linux桌面上千篇一律的静态壁…

📅 2026/8/15 2:24:30
规范数字化营销数据管理 助力中小电商精细化运营——解读3an推客推广计划数据查看时效规则

规范数字化营销数据管理 助力中小电商精细化运营——解读3an推客推广计划数据查看时效规则

当下数字经济持续蓬勃发展,电商已成为实体经济数字化转型的重要载体,海量中小商家依托站外推广工具实现新品冷启动、店铺流量增长。在电商精细化运营时代,投放数据是商家调整推广策略、控制营销成本、提升转化效率的核心依据。不少电商从业者…

📅 2026/8/7 1:38:08
MORE NEWS

更多资讯

📰

SmartMediaKit与YOLO融合:低延迟播放+实时目标检测一体化实践

之前做安防监控项目对接的时候,我一直在琢磨一件事:播放这套东西和检测这套东西,到底能不能真正揉到同一个工程里,而不是各干各的、中间隔着一层人肉转发。后来把 SmartMediaKit 和 YOLO 硬凑到了一个项目里,边踩坑边调…

📰

小应用数据库选型决策指南:自建MySQL vs 阿里云RDS

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

医院低代码选型实战:信通院白皮书框架与POC测评避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

宏内核与微内核:两种设计哲学的对比

090 宏内核与微内核:两种设计哲学的对比 上一篇文章我们提到了内核的几种类型。今天我们来深入对比最经典的两种:宏内核和微内核。 这两种设计代表了计算机系统设计中最核心的一个哲学问题:是把所有功能集中在一起,还是分散开来? 宏内核:大一统的设计 架构 宏内核(…

📰

如何快速搭建移动测试自动化:Maestro 端到端测试完整落地指南

如何快速搭建移动测试自动化:Maestro 端到端测试完整落地指南 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 做移动测试自动化,最该先问的不是"上哪套框…

📰

基于STM32的智能热水器恒温控制系统设计与实现

简介:这是一份基于STM32的智能热水器系统完整设计资源,适合嵌入式方向的学生、毕业设计者及电子竞赛参与者。方案主控采用STM32,通过PCF8591芯片加滑动变阻器模拟温度、水位检测,配合光敏电阻判断光照强度,并利用DS130…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬