const countSubstrings = (s) => {
const strLen = s.length;
let numOfPalindromicStr = 0;
// 初始化一个二维数组
let dp = Array.from(Array(strLen), () => Array(strLen).fill(false));
//对于动态规划问题,首先要看清两层for循环的结构,看看遍历的是哪些区域,哪些内容
for (let j = 0; j < strLen; j++) {
for (let i = 0; i <= j; i++) {
// 外层的if是个分支结构,因为这个默认都是false,所以else的情况就是不用写
if (s[i] === s[j]) {
// 内层的if也是分支结构,主要用来将两种情况进行分流,对两种情况进行不同的逻辑处理
if (j - i < 2) {
dp[i][j] = true;
} else {
dp[i][j] = dp[i + 1][j - 1];
}
// 对回文子串的个数进行计数
numOfPalindromicStr += dp[i][j] ? 1 : 0;
console.log(dp);
}
}
}
return numOfPalindromicStr;
};
const res = countSubstrings("cabac");
console.log(res);