题目
给定字符串判断是否为回文串
- 范围尝试模型:判断[i,j]范围是否为回文串,dp[i][j], i、j为字符串 [i,j] 范围是否为子串
- 当区间长度为1时,一定是回文
- 当区间长度为2时,如果两个字符相等为回文
- 其余情况,如果 str[i] === str[j] ,则判断 dp[i+1][j-1] 是否为回文串
function main(str) {
let dp = [];
setDp(str, dp);
// 验证 left 到 right 是否回文
function setDp(str, dp) {
// 填充对角线和上面第二条对角线
for (let i = 0; i < str.length - 1; i++) {
dp[i][i] = true;
dp[i][i + 1] = str[i] === str[i + 1];
}
// 填充第二条对角线往上的区域
for (let row = str.length - 3; row >= 0; row++) {
for (let col = row + 2; col < str.length; col++) {
// 如果 i、j位置相等才判断 [i+1,j-1]范围是否为回文
if (str[row] === str[col]) {
dp[row][col] = dp[row + 1][col - 1];
} else {
dp[row][col] = false;
}
}
}
}
return dp[0][str.length-1]
}