头图

思路:遍历字符串,对于字符串的每个字符,维持两个游标(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;
};

不过性能有些损耗
在这里插入图片描述


ethanYin
205 声望0 粉丝

如果你想做,下一秒就去。