JavaScript:leetcode_5. 最長迴文子串

題目說明


給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。
示例 2:

輸入: "cbbd"
輸出: "bb"

解題思路一

  1. 遍歷字符串,從i開始向左右擴展對比 i--, i++ 是否相同,過程求出最大值。
  2. 以上僅檢測奇數迴文即:"cbabc"而不能檢測cbbc
  3. 對原字符串進行改造例如"cbbc" => "c#b#b#c"這樣就可以以#爲中心對比了。(奇數長度例如"cbabc" => c#b#a#b#c並不會被#影響,所以不用擔心破壞了對比結構。)
  4. 對比過程中要注意不要讓#b#b#b這樣的情況給頂替了。相同長度時要取末尾爲字母的。

代碼實現一

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    s = s.split('').join('#');
    let max = 0;
    let start = 0;
    let end = 0;
    for (let i = 0; i < s.length; i++) {
        let left = i - 1;
        let right = i + 1;
        while(left >= 0 && right < s.length) {
            if (s.charAt(left) === s.charAt(right)) {
                if (max < (right - left) && s.charAt(right) !== '#') {
                    max = right - left;
                    start = left;
                    end = right;
                }
                right++;
                left--;
            } else {
                break;
            }
        }
    }
    return s.slice(start, end + 1).split('#').join('')
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章