思路:遍历字符串,对于字符串的每个字符,维持两个游标(leftright),找到游标对应字符相等时就同速度向两边扩散。

对于 奇数长度子串,left = right

对于偶数成都子串,left = right - 1

/** * @param {string} s * @return {string} */var longestPalindrome = function(s) {    let res = '';    for(let i = 0; i< s.length; i++){        // 奇数        let left = i, right = i;        while(left >= 0 && right < s.length && s[left]==s[right]) {            left--;            right++;        }        if(res.length < right - left -1){            res = s.substring(left + 1, right);        }        // 偶数        left = i, right = i+1;        while(left >= 0 && right < s.length && s[left]==s[right]) {            left--;            right++;        }        if(res.length < right - left -1){            res = s.substring(left + 1, right);        }    }    return res;};

为了看起来更不便能够简略的封装一下

var longestPalindrome = function(s) {    let res = '';    for(let i = 0; i< s.length; i++){        find(i, i);        find(i, i+1);    }    function find(left, right){        while(left >= 0 && right < s.length && s[left]==s[right]) {            left--;            right++;        }        if(res.length < right - left -1){            res = s.substring(left + 1, right);        }    }    return res;};

不过性能有些损耗