给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

示例 2:

输入: “cbbd”
输出: “bb”

回文的特性:回文串一定是对称的;回文串可能是abba型,也可能是aba型。

思路:
中心扩展法
1.回文串一定是对称的。所以每次选择一个中心,进行中心向两边扩展比较左右字符是否相等。
2.中心点的选取有两种:
①aba:中心点是b
②abba:中心点是两个b之间
3.所以共有两种组合可能
left:i,right:i (aba型)
left:i,right:i+1(abba型)

//中心扩展法
var longestPalindrome = function(s) {if(!s || s.length < 2){return s}var start = 0var end = 0var n = s.length//中心扩展function centerExpend(left,right){while(left >=0 && right < n && s[left] == s[right]){left--right++}return right-left-1}for(var i=0;i<n;i++){var len1 = centerExpend(i,i)var len2 = centerExpend(i,i+1)//两种组合取最大的回文串长度var maxLen = Math.max(len1,len2)if(maxLen > end-start){//更新最大回文串的首位字符索引start = i - ((maxLen-1) >> 1)  //>>右移操作end = i + (maxLen >> 1)}}return s.substring(start,end+1)
};

4.右移操作的目的是找出start和end。为什么这么选呢?
右移1位其实就是除以2再向下取整,即5>>1 == 2;4>>1 == 2。
所以又有:
①(单数 - 1) >> 1 == 单数 >> 1
②(双数 >> 1) - 1 == (双数 - 1) >> 1

floor()是向下取整。

而当我们找到中心位时,start和end是:
①aba型:(长度为单)
start = i - floor((长度 - 1) / 2) = i - (长度 - 1) >> 1
end = i + floor((长度 - 1) / 2) = i - (长度 - 1) >> 1 = i - 长度>>1
②abba型:(长度为双)
start = i - ((长度 / 2) - 1) = i - (长度 - 1) >> 1
end = i + 长度 / 2 = i + 长度>>1
整合起来就是:

start = i - ((maxLen-1) >> 1)  //>>右移操作
end = i + (maxLen >> 1)

JS 找出字符串中最长回文子串相关推荐

  1. 计算给定字符串中最长回文子串的长度(或查找最长回文子串)

    题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度. 给定字符串A以及它的长度n,请返回最长回文子串的长度. 测试样例: "abc1234321ab",12 ...

  2. 【字符串】最长回文子串 ( 动态规划算法 ) ★

    文章目录 一.回文串.子串.子序列 二.最长回文子串 1.动态规划算法 2.动态规划算法代码示例 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都 ...

  3. 【字符串】最长回文子串 ( 蛮力算法 )

    文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...

  4. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门

    缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~  本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...

  5. 算法笔记-问题 A: 【字符串】最长回文子串

    问题 A: [字符串]最长回文子串 题目描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同.如abba和yyxyy.在判断回文时 ...

  6. 【回文字符串】 最长回文子串O(N) Manacher算法

    原理讲的清晰:Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串 注意: ①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯 ②最终 ...

  7. Java字符串中最长回文子字符串

    Longest palindrome substring in a string is a very common java interview question. To find out the l ...

  8. (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串

    以下内容转载自:传送门 源于这两篇文章:  http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 http://zhuhongcheng. ...

  9. Codeup-问题 A: 【字符串】最长回文子串

    题目描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同.如abba和yyxyy.在判断回文时,应该忽略所有标点符号和空格,且忽略 ...

最新文章

  1. 2021考研时间公布 2020年12月26日至27日进行初试
  2. 17.QT-事件处理分析、事件过滤器、拖放事件
  3. 遵义医科大学计算机专业好吗,遵义医科大学专业评价
  4. 小白学数据分析------日活跃人数分析
  5. 看完这些福利才知道,为什么说双12一定要出去浪
  6. Linux 基金会执行董事 Jim Zemlin:全球 Linux 的发展和生态
  7. 13.C++ vector 操作
  8. HTML中的select只读
  9. 7.Shell 编程从入门到精通 --- 流编辑
  10. 易掌管-计件工资系统免费登记派送中
  11. 搭建Ubuntu虚拟机
  12. Elasticsearch面试专题总结
  13. C语言---移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤
  14. 【修理】电脑维修 显卡错误(错误代码:43)
  15. 如何成为云原生技术高阶玩家?华为云最近做了这件事
  16. Java parallel Bucket Sort
  17. Android5.0,6.0,7.0,8.0新特性整理
  18. 跟着MindSpore一起学习深度概率
  19. 山东大学计算机考博难度,我的四个考博面试经历:人大,山大,华科,华理工...
  20. navicat 操作数据库的快捷键

热门文章

  1. matlab两横排合并,Matlab设置Legend横排、分块
  2. ASP.NET中使用网络驱动器
  3. 通过WinPE卸载补丁,解决因安装补丁电脑蓝屏、无法开机等问题
  4. Python入门——Day4(元组,字符串格式化,转义字符,format函数)
  5. 董老师又双叒叕送书啦,10本《Python程序设计入门与实践》
  6. Pytorch框架TorchScript模型转换方法
  7. 【推荐】比IPH5更爱疯的G5
  8. 这些强大到极致的iPhone自带App,个个都是一个顶十个好用
  9. 基于博弈论的出租车系统效率优化
  10. Ubuntu开机黑屏且左上角闪烁光标,登录页面键盘鼠标无响应的解决方法