关于javascript:算法-最长回文子串

48次阅读

共计 794 个字符,预计需要花费 2 分钟才能阅读完成。

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

不过性能有些损耗

正文完
 0