var longestPalindrome = function(s) {
//只有一个字符直接返回
const len = s.length;
if(len < 2)return s;
//建立动态规划数组
var arr = new Array();
for(var i = 0; i < len; i++){
arr[i] = new Array();
for(var j = 0; j < len; j++){
arr[i][j] = 0;
}
}
//动态规划P(i,j)=P(i+1,j−1)∧(Si==Sj)
//初始化分两个,一个是单字符串,第二个是双相同字符串
for(let i = 0; i < len; i++){
arr[i][i] = 1;
}
for(let i = 1; i < len; i++){
if(s[i] == s[i - 1])arr[i-1][i] = 1;
}
for(let i = 1; i < len; i++){
for(let j = 0; j < len - i; j++){
let r = j;
let c = r + i;
if(arr[r+1][c-1] == 1 && s[r] == s[c])arr[r][c] = 1;
}
}
//查表,从最右上角开始查
for(let i = len - 1; i >= 0; i--){
for(let j = 0; j < len - i; j++){
let r = j;
let c = r + i;
if(arr[r][c] == 1)return s.slice(r,c+1);
}
}
};
思路: