尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/10/28 10:36:10
Linux动态壁纸革命:告别静态桌面,拥抱沉浸式视觉体验

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

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

📅 2026/10/28 12:09:23
规范数字化营销数据管理 助力中小电商精细化运营——解读3an推客推广计划数据查看时效规则

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

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

📅 2026/10/29 12:55:17
MORE NEWS

更多资讯

📰

高淳哪里有电工证复审?郑州报考避坑指南教你少走弯路

高淳哪里有电工证复审?郑州报考避坑指南教你少走弯路 你是不是正为“高淳哪里有电工证复审”发愁?报名渠道太多,真假难辨,怕被中介骗钱,怕走错流程浪费时间?别急,这期郑州报考避坑指南专门为你准备,讲透电工证复审流程,教你避开那些年踩过的坑。…

📰

工地太忙根本没时间复习考试?高电工证查询和上岗必备全攻略来了

工地太忙根本没时间复习考试?高电工证查询和上岗必备全攻略来了 工地太忙根本没时间复习考试?你不是一个人。现在施工项目节奏快、任务重,很多一线电工、焊工、高处作业人员,连吃饭时间都赶不上,更别提抽空复习高电工证考试了。但你知道吗?高电工证查询…

📰

中级电工证能申请补贴 怎么报名最省事

中级电工证能申请补贴 怎么报名最省事 之前考的证在外省能不能转过来?这是很多电工朋友最关心的问题。特别是在河南商丘等地,很多电工证是通过外省报名或考试获得的,但实际工作中却发现证书在当地使用并不方便,甚至在申请补贴、岗位晋升时遇到阻碍。如果…

📰

电工证办到什么年龄多久拿证 从业者避坑全攻略

电工证办到什么年龄多久拿证 从业者避坑全攻略 你是不是也和我一样,一听说要办电工证,就犯愁不知道去哪报名,怕被中介坑?特别是像我们这种在驻马店做公路工程的,很多时候要接触电路、设备,不办证根本不敢上手,但又怕选错地方,花了钱还拿不到证,耽误…

📰

宁波铲车特种工考证班保姆级教程:实操考试心里没底怕挂科怎么办?

宁波铲车特种工考证班保姆级教程:实操考试心里没底怕挂科怎么办? 实操考试心里没底怕挂科?宁波铲车特种工考证班的学员,特别是来自鹤壁中小施工企业的负责人,常常因为对考试流程、内容、通过率不熟悉而焦虑。别急,这篇保姆级教程将从考试内容、备考重点…

📰

宝应高压电工证复审真实经历:学历不高怕报不上名?看看过来人怎么说

宝应高压电工证复审真实经历:学历不高怕报不上名?看看过来人怎么说 你是不是也担心自己学历不高,根本报不上高压电工证?别急,我就是从郑州金水区一名建筑工人一步步考到宝应高压电工证复审的过来人,今天把我的 真实经历…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬