题目 难度-中等
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
解题思路
1.明白回文字符串是什么,左边读起与右边读起是一样的,比如:上海自来水来自海上
2.如果字符串小于2,直接返回字符串
3.定义两个变量,一个start存储当前找到的最大回文字符串的起始位置,另一个maxLength记录字符串的长度。终止位置就是start+maxLength;
4.创建一个help函数,来判断左边与右边是否越界,是否相等,满足条件则更新start,maxlength,left,right.继续判断,直到不满足为止。
5.遍历字符串,每个位置调用help方法两遍。因为遍历的位置存在奇偶。
具体代码
const longestPalindrome = function (s) {
if (s.length < 2) return s;
let start = 0, maxLength = 1;
const expandAroundCenter = function (left, right) {
while (left >= 0 && right < s.length && s[left] === s[right]) {
let len = (right - left) + 1;
if (len > maxLength) {
maxLength = len;
start = left;
}
left--;
right++;
}
}
for (let i = 0; i < s.length; i++) {
expandAroundCenter(i - 1, i + 1);
expandAroundCenter(i, i + 1);
}
return s.substring(start, start + maxLength);
}
var s1 = "babbad";
console.log(longestPalindrome(s1));
var s2 = "上海自来水来自海上";
console.log(longestPalindrome(s2));
欢迎有志之士一起来学习