1. 程式人生 > >LeetCode—Longest Palindromic Substring —javascript實現

LeetCode—Longest Palindromic Substring —javascript實現

最長迴文子串

題目連結:Longest Palindromic Substring

題目大意:給定一個字串s,找出在 s中的最長迴文子串。 假設字串s長度最長1000。
舉個栗子:
輸入: "babad"
輸出: "bab"
注: "aba" 也是正確答案

解題思路(leetCode網站上的動態規劃思想):
在這裡插入圖片描述

【ans=1——記錄最長迴文子串長度;   mi=0,mj=0——最長迴文子串的起始和結束位置索引;】
 1. 初始化長度為1的子串
 2. 初始化長度為2的子串
 3. 判斷長度為3——s.length的子串是否為迴文串(此處DP)
 (Note:2、3步都要更新ans.mi.mj)
/**
 * @param {string} s
 * @return {string}
 */

function initArr(Len){//陣列初始化
    let arr=new Array(Len);
    for(let i=0;i<Len;i++){
        arr[i]=new Array(Len).fill(false,0,Len);
        arr[i][i]=true;//初始化長度為1的子串
    }
    return arr;
}
var longestPalindrome = function(s) {
    //init
    let Len=
s.length; let arr=initArr(Len); let ans=1,mi=0,mj=0; for(let i=0;i<Len-1;i++){ //初始化長度為2的子串 if(s[i]==s[i+1]){arr[i][i+1]=true;ans=2;mi=i;mj=i+1;} } //DP for(let len=3;len<=Len;len++){ for(let i=0;i<Len&&(i+len-1)<Len;i++){ let j = i + len -
1; if(arr[i+1][j-1]&&(s[i]==s[j])){ arr[i][j]=true; if(ans<len){ mi=i; mj=j; ans=j-i+1; } } } } return s.substring(mi,mj+1); };