最长回文子串(中心扩展算法详解及思考)

  • 题目
  • 中心扩展算法详解
  • 代码实现

题目

  1. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

中心扩展算法详解

  • 这代码很好理解,主要是卡了我很久的地方为这个索引的计算,仔细推敲之下才搞清楚关于这些索引的细节点:在代码里我已经具体注释出来。
  • 最关键的问题不仅限于本文,很多时候都是这样卡住思路一卡一整天,所以必须总结思考,关于这类的索引下标问题,必须要逐个推敲,才能写出自己思路的完整代码,最好举例子让自己理解,不懂的代码要先敲一下,再理解,再自己重新写,这样才能吃透,思路必须清晰,唉,晚安自己

代码实现

  1. 详细的索引推敲见代码注释
package com.immunize.leetcode.longestPalindrome;/*** 2.暴力法优化* * @author Mr IMMUNIZE**/public class Solution2 {public String longestPalindrome(String s) {if (s == null || s.length() < 1)return "";int start = 0, end = 0;for (int i = 0; i < s.length(); i++) {// 字符串的长度为奇数时,从同一字符出发进行中心扩展String str1 = Excenter(s, i, i);// 字符串的长度为奇数时,从该字符和其后相邻字符出发进行中心扩展String str2 = Excenter(s, i, i + 1);// 获取两种比较之下的最长回文字符串的长度int len = Math.max(str1.length(), str2.length());// 更新长度信息if (len > end - start) {// 当前起始索引要往前退 的值和当前结束索引往后退的值: 分开算,// 奇数的话,(当前长度-1)/2 或 当前长度/2// 偶数的话,(当前长度-1)/2// 统一起始点索引为 当前索引 - (当前长度-1)/2// 当前结束索引往后退的值: 分开算,// 奇数: 当前长度/2 或 (当前长度-1)/2// 偶数:当前长度/2// 统一结束点索引:当前索引 + 当前长度/2start = i - (len - 1) / 2;end = i + len / 2;}}// 截取start-end闭区间的所有字符return s.substring(start, end + 1);}private String Excenter(String s, int left, int right) {while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}return s.substring(left + 1, right);}
}
  1. 效率明显提升了很多


3. 马拉车算法真的看不懂,我先睡了,明天再看,这题能卡我一周

20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)相关推荐

  1. leetcode 5-最长回文子串(中心扩展算法)

    题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 示例1 输入: "babad" 输出: "bab" ...

  2. 【最长回文子串】Manacher算法详解

    写在前面 manacher算法解决最长回文子串以及变形问题的时间复杂度为O(n). 如果你想囫囵吞枣,只需要使用到该算法,你可以直接把代码拿走:但如果你想深入了解这个算法的工作原理和关键部分解读,还是 ...

  3. 5. 最长回文子串——基于扩展中心法的优化

    class Solution {public String longestPalindrome(String s) {if (s == null) return null;char[] cs = s. ...

  4. leetcode 最长回文子串

    103 / 103 个通过测试用例 状态:通过 执行用时:8 ms 内存消耗:36.3 MB 提交时间:6 月,3 周之前 class Solution {public String longestP ...

  5. 中心扩散算法--最长回文子串

    这篇看一下中心扩散算法. 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2:输入: " ...

  6. LeetCode:Longest Palindromic Substring 最长回文子串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  7. Manacher's algorithm: 最长回文子串算法

    Manacher 算法是时间.空间复杂度都为 O(n) 的解决 Longest palindromic substring(最长回文子串)的算法.回文串是中心对称的串,比如 'abcba'.'abcc ...

  8. 算法-两最长回文子串

    题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1:输入: "babad" 输出: "bab" 注意: &q ...

  9. 最长回文字符串(马拉车算法)

     Manacher算法 算法总结第三弹 manacher算法,前面讲了两个字符串相算法--kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 "马拉车& ...

最新文章

  1. layer.open子页面调用父页面的方法_记好这 24 个 ES6 方法,用来解决实际开发的 JS 问题...
  2. 如何在windows系统上安装Tensorflow Object Detection API?
  3. BZOJ3133[Baltic2013]ballmachine
  4. activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式
  5. 移植.NET Core计划,整合各平台变得更简单了!
  6. 《集体智慧编程》——第一章导读
  7. python类定义中__init__(),在__init__中定义一个成员以在python中的类体中定义它的区别?...
  8. Python爬虫_HTTP标准
  9. Java设计模式之迭代子模式
  10. excel打印字被表格遮住_Excel表格太大无法打印在一页纸上?这几个打印技巧你值得学习...
  11. win2k,XP下用setupapi.dll自动安装Driver
  12. unicode编码java_JAVA转化Unicode编码
  13. 简单的JAVA小程序
  14. Yeah,我的Pygame安装成功了!(Windows Pygame 安装教程)
  15. FPGA学习笔记(四)——引脚分配、AC620开发板连接、测试程序
  16. 学生专用计算机怎样开启关机,电脑自动关机,教您笔记本怎么设置自动关机
  17. 足球比赛中的数据科学
  18. 海淘 海外购 iherb 礼券码 优惠码
  19. Ubuntu 1804 切换国内源
  20. 淘宝首页前端开发分析

热门文章

  1. 干货收藏!史上最强 Tomcat 8 性能优化来啦!| 原力计划
  2. Google 是如何做 Code Review 的?| 原力计划
  3. 如何做一个“擅长” Google 搜索的开发专家?
  4. IBM 推出全球首台计算性能最强悍的 53 位量子计算机
  5. 重磅 | 京东云区块链数据服务(BDS)正式开源!
  6. matlab exe mingw,matlab笔记:安装MinGW编译器
  7. 哈工大女孩学计算机毕业转行,2020考生切记,上985读这些专业,据说都是“坑”!...
  8. java 生成多叉树_java中多叉树(tree)的生成与显示 | 学步园
  9. 带你重新认识ZooKeeper!java数组合并去重
  10. pixel1代android11,Pixel用户吐槽Android 11:升级后性能被劣化