天天看點

LeetCode——最長回文子串(中心拓展法)

題目描述

LeetCode——最長回文子串(中心拓展法)

解題思路

  1. 将字元串的長度分為奇數和偶數的情況。
  2. 奇數的情況,傳入的是兩個相同的下标,偶數的情況傳入的是i和i+1。
  3. 如果m大于等于0,n小于len,并且這兩個字元是相等的,則一個左移,一個右移。
  4. 移動完畢之後,判斷是否更新最終的結果,隻要比最終結果長,就更新最終結果。

AC代碼

var longestPalindrome = function(s) {
    // 擷取字元串的長度
    let len = s.length;
    // 定義最終傳回的結果
    let result = '';
    // 循環周遊每一個字元并更新最終的結果
    for (let i = 0; i < len; i++) {
        // 奇數的情況
        getResult(i,i);
        // 偶數的情況
        getResult(i,i+1);
    }
    function getResult(m,n) {
        while(m >= 0 && n < len && s[m] === s[n]) {
            m--;
            n++;
        }
        // 判斷是否更新最終的結果,隻要比最終結果長,就更新為最終結果
        if (n - m -1 > result.length) {
            result = s.slice(m+1,n);
        }
    }
    return result;
};
複制代碼      

題目反思

  • 學會中心拓展法這個思路。
  • 熟練記憶slice這個API的用法。

繼續閱讀