动态规划的老套路:
1. 处理初始状态
2. 处理状态转移方程
本文面试常考基动态规划算法题 => 最长回文子串
function longestPalindRome(str){
let len=str.length;
if(len===1){
return str;
}
let start=0;
let longest=1;
//新建二维数组
let dp=new Array(len).fill(new Array(len).fill(null));
//处理初始状态
for(let i=0;i<len;i++){
dp[i][i]=1;
if(i<len-1){
if(str[i]===str[i+1]){
dp[i][i+1]=1;
start=i;
longest=2;
}
}
}
//处理状态转移方程
for(let l=3;l<len;l++){
for(let i=0;i+l-1<len;i++){
let j=i+l-1;
if(str[i]===str[j]&&dp[i+1][j-1]=1){
dp[i][j]=1;
start=i;
longest=l;
}
}
}
return str.substr(start,longest);
}