日常生活的交流与学习

首页 新随笔 联系 管理
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);

posted on 2022-10-20 09:40  lazycookie  阅读(18)  评论(0编辑  收藏  举报