/**
* @param {string} s
* @return {string}
*/
// 思路:DP
// 限定长度,从小到达枚举
// 有意思的点:初始化
var longestPalindrome = function(s) {
// 二维数组初始化
let dp = []
let len = s.length
for(let i=0;i<len;i++){
dp[i] = []
}
// dp值初始化
let st=0,ed=0
// 本身就会成立
for(let i=0;i<len;i++){
dp[i][i] = 1
}
for(let i=0;i<=len-2;i++){
if(s[i]===s[i+1]){
dp[i][i+1] = 1
st = i
ed = i+1
}
}
// 开始DP了,以字串的长度不同进行考虑
for(let n=3;n<=len;n++){
// 枚举左边界
for(let i=0;i<len-1;i++){
// 得到右边界
let j = i + n - 1
if(dp[i+1][j-1]){
if(s[i] === s[j]){
dp[i][j] = 1
st = i
ed = j
}
}
}
}
return s.substring(st,ed+1)
};
这道题主要是想明白:
1.状态怎么表示
2.怎么初始化
3.状态转移方程是啥
4.st 和 ed记录结束状态