每天一道算法題(十六)

最長迴文子串

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

示例 1:

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

示例 2:

輸入: “cbbd”
輸出: “bb”

採用中心擴展法

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
  if(!s || s.length < 2){
    return s;
  }
  let start = 0,end = 0;
  let num = s.length
  let centerExpend = (left,right)=>{
    while(left>=0&&right<num&&s[left] === s[right]){
      left-- ;
      right++;
    }
    return  right-left-1; // 返回長度
  }
  for(let i=0;i<num;i++){
    let type1 = centerExpend(i,i); // 中心對稱
    let type2 = centerExpend(i,i+1); // 左右對稱
    let re = Math.max(type1,type2)
    if(re > end - start){
      start = i - ((re-1)>>1)
      end = i + (re>>1)
    }
  }
  return s.substring(start,end+1)
}

執行用時 :104 ms
內存消耗 :36.7 MB

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