资源干货第一时间送达!(周日赠书噢)
写在前边:
小詹此记录贴的读者越来越少了,也许是小詹总结的不够好欢迎留言区提出宝贵的意见!也欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!
No.5 最大回文子串
原题:(有中文网站,就不去读英语啦哈哈)
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。
例如:
思路分析:这题难度官网给出的是中等难度,小詹自己做的时候却花了很久,学习之路还有很远啊~看到这个题目,小詹是想着先找到所有存在的回文子串,之后比较长度,输出最长的子串。动笔根据所给案例进行了比划,发现一个很关键的点!最长回文子串的中间子串也是回文串,换言之,回文串是否最长,可以看回文串两边的字符是否相同。例如“dabcba”的最长回文子串是“abcba”,其可看出回文子串“bcb”的拓展,判断“bab”两边的字符是否相同决定是否进行回文子串拓展(可以利用切片的索引左右移动实现)
排坑!小詹觉得这个思路不错,就按照思路进行了实现,代码是下面这样子的(有雷坑噢)
嗯~小伙伴感兴趣可以将代码提交试试看,只能通过部分样例测试。为什么呢?小詹提交后发现类似示例2“cbbd”这种会出错!找到了错误就好分析了,是因为上边的代码默认从同一个字符位置向两端拓展,然而类似“cbbd”这种测试用例,是从相邻两个字符串位置进行拓展,所以我们可以两种情况都考虑进去,最后选择最长的,考虑到这之间有相同的操作,为代码整洁,将其模块化分割出一个函数,代码如下:
给出运行结果之前,有必要关于self说几句,之前也有小伙伴群里问过,这里给出几句话:
self 不是一个关键词,可以替换成其他(比如this),只是习惯用self
self不是指向类本身,而是指向类实例对象(比如class person() a = person('xiaozhan'),这时self会指向实例person类的实例类对象a)
完整代码运行结果如下:(小詹是中文网站看题,英文网站提交)
领取专属 10元无门槛券
私享最新 技术干货