leetcode5-最长回文子串

原题链接: 题目描述:从字符串s中找到最长的回文子串,并返回这个子串 思路: 两种情况 一种是回文子串长度为奇数(如aba,中心是b) 另一种回文子串长度为偶数(如abba,中心是b,b) 循环遍历字符串 对取到的每个值 都假设他可能成为最后的中心进行判断 遍历字符串s,以当前元素为回文的中间元素往两边找,找的过程中分两种情况假设子串是偶数的时候 找以当前元素和下一个元素为中间往两边;假设是奇数时候 找以当前元素为中间的两边,直到字符串s遍历结束

/**
 * 遍历:总是以当前这个元素为回文的中间元素,往两边找
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
          
   
    // 边界条件
    let len = s.length
    if (len < 2) return s
    let res = 
    let getPalindrome = (left, right) => {
          
   
        while (left >= 0 && right < len && s[left] === s[right]) {
          
   
            left--
            right++
        }
        // 当left和right不相等的时候跳出循环,所以回文子串的位置为left+1 ,和right-1中间的字符
        if (right - left - 1 > res.length) {
          
    //注意点: 取长度的时候是right-1 和left+1 之间的长度
            res = s.slice(left + 1, right)//slice取值左闭右开
        }
    }
    for (let i = 0; i < len; i++) {
          
   
    	//回文长度是奇数
        getPalindrome(i, i)
        //回文长度是偶数
        getPalindrome(i, i + 1)
    }
    return res
};
let s = asvvs
s = "cbbd"
console.log(longestPalindrome(s))

小知识点: 数组和字符串的slice使用 s.slice(left,right) 取字符串s的从left到right-1位置上的元素,位置从0开始。参数可以取负值 -1代表最后一个元素(也就是从后往前遍历时候的第一个元素),-2代表倒数第二个元素

经验分享 程序员 微信小程序 职场和发展