1. 题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"输出: "bb"
2. 解题思路
使用中心扩展的方法:
- 选取对称中心(奇数长度的字符串为中心两个字符的中间,偶数长度的字符串中心为中间的字符)
- 通过对比选择出两种组合较大的回文子串长度
- 对比之前的长度,判断是否更新起始的位置
- 遍历完之后,根据起始位置,截取最长回文子串
3. 代码实现
/*** @param {string} s* @return {string}*/var longestPalindrome = function(s) {if(s == null || s.length <1){return ''}let start = 0let end = 0// 定义中心扩展的方法const fn = (s,left,right) => {while(left >=0 && right< s.length && s[left] === s[right]){left--right++}return right - left -1}// 遍历字符串for(let i = 0; i<s.length; i++){const len1 = fn(s, i, i)const len2 = fn(s, i, i+1)const len = Math.max(len1, len2)// 判断起始位置是否更新if(len > end - start){start = i- Math.floor((len-1)/2)end = i+ Math.floor(len/2)}}return s.substring(start, end+1)};
4. 提交结果

