题目:给你一个字符串 s,找到 s 中最长的回文子串。
字符串方法:string.substr(start,length)
1、定义变量
/**
* 字符串:s
* 左边界:l
* 右边界:r
*/
2、成为回文子串条件
l >= 0 && r < s.length && s[l] === s[r]
3、封装函数
满足回文条件,通过l--、r++从中心向两边扩散,否则返回上一个满足条件的子串
const palindrome = (s, l, r) => {
while(l >= 0 && r < s.length && s[l] === s[r]){
l--;
r++;
}
return s.substr(l + 1, r - l - 1)
}
4、字符串每个位置都可作为回文子串的中心,因此遍历字符串
let res = ''
for(let i = 0; i < s.length; i++){
// 回文子串中心为一个字节
let s1 = palindrome(s, i, i)
// 回文子串中心为两个字节
let s2 = palindrome(s, i, i + 1)
// 取以上两种情况的最大值
res = res.length > s1.length ? res : s1;
res = res.length > s2.length ? res : s2
}
5、完整代码
var longestPalindrome = function(s) {
// 中心往两边扩散
const palindrome = (s, l, r) => {
while(l >= 0 && r < s.length && s[l] === s[r]){
l--;
r++;
}
return s.substr(l + 1, r - l - 1)
}
let res = ''
for(let i = 0; i < s.length; i++){
// 一个中心点
let s1 = palindrome(s, i, i)
// 两个中心点
let s2 = palindrome(s, i, i + 1)
res = res.length > s1.length ? res : s1;
res = res.length > s2.length ? res : s2
}
return res
};