22.最長迴文子串

題目描述:

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

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

代碼實現:

  • 中心擴展法,每個迴文數都可以以一箇中心擴展,兩端的數都是相同的,如此想法,就可以寫出中心擴展法,以一個for循環遍歷字符串,確定迴文數的中心,之後再寫一個判斷是否是迴文數的函數,在這個for循環內嵌套,最後分離子串即可。
  • 時間複雜度:O(n^2)
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    var midExpand = (left, right) => {
        while (left >= 0 && right < s.length && s[left] === s[right]) {
            left--
            right++
        }
        return right - left - 1
    }
    var start = 0, end = 0
    if (s.length < 2) {
        return s 
    }
    for (var i = 0 ; i < s.length; i++ ) {
        var len = Math.max(midExpand(i, i), midExpand(i, i + 1))
        if (len > end - start) {
            start = i - Math.floor((len - 1) / 2)
            end = i + Math.floor(len / 2)
        }
    }
    return s.substring(start, end + 1)
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章