LeetCode—Longest Palindromic Substring —javascript實現
阿新 • • 發佈:2018-12-15
最長迴文子串
題目連結: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);
};