JS 找出字符串中最长回文子串
给定一个字符串 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 找出字符串中最长回文子串相关推荐
- 计算给定字符串中最长回文子串的长度(或查找最长回文子串)
题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度. 给定字符串A以及它的长度n,请返回最长回文子串的长度. 测试样例: "abc1234321ab",12 ...
- 【字符串】最长回文子串 ( 动态规划算法 ) ★
文章目录 一.回文串.子串.子序列 二.最长回文子串 1.动态规划算法 2.动态规划算法代码示例 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都 ...
- 【字符串】最长回文子串 ( 蛮力算法 )
文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...
- 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门
缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~ 本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...
- 算法笔记-问题 A: 【字符串】最长回文子串
问题 A: [字符串]最长回文子串 题目描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同.如abba和yyxyy.在判断回文时 ...
- 【回文字符串】 最长回文子串O(N) Manacher算法
原理讲的清晰:Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串 注意: ①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯 ②最终 ...
- Java字符串中最长回文子字符串
Longest palindrome substring in a string is a very common java interview question. To find out the l ...
- (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串
以下内容转载自:传送门 源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 http://zhuhongcheng. ...
- Codeup-问题 A: 【字符串】最长回文子串
题目描述 输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同.如abba和yyxyy.在判断回文时,应该忽略所有标点符号和空格,且忽略 ...
最新文章
- 2021考研时间公布 2020年12月26日至27日进行初试
- 17.QT-事件处理分析、事件过滤器、拖放事件
- 遵义医科大学计算机专业好吗,遵义医科大学专业评价
- 小白学数据分析------日活跃人数分析
- 看完这些福利才知道,为什么说双12一定要出去浪
- Linux 基金会执行董事 Jim Zemlin:全球 Linux 的发展和生态
- 13.C++ vector 操作
- HTML中的select只读
- 7.Shell 编程从入门到精通 --- 流编辑
- 易掌管-计件工资系统免费登记派送中
- 搭建Ubuntu虚拟机
- Elasticsearch面试专题总结
- C语言---移盘子----Hanoi(汉诺)塔问题,显示移动盘子的步骤
- 【修理】电脑维修 显卡错误(错误代码:43)
- 如何成为云原生技术高阶玩家?华为云最近做了这件事
- Java parallel Bucket Sort
- Android5.0,6.0,7.0,8.0新特性整理
- 跟着MindSpore一起学习深度概率
- 山东大学计算机考博难度,我的四个考博面试经历:人大,山大,华科,华理工...
- navicat 操作数据库的快捷键