力扣647回文子串--动态规划

首先我们来想一下动态规划的五部曲:

1、确定dp数组以及下标的含义;

2、确定递推公式;

3、dp数组的初始化;

4、确定遍历顺序;

5、举例推导dp数组;

五部曲的第一步:确定dp数组以及下标的含义

我们定义一个boolean的二维数组来作为dp数组,下标i和j分别表示数组的行和列

五部曲的第二步:确定递推公式

上图中有三种情况可以得到回文子串:

1、当i==j时,也就是数组的对角线都是单个字母,即可认为是回文子串

2、当i==j+1时,也就是两个相邻的字符相同是回文子串;

3、当j>i+1时,我们不仅得判断第i个和第j个字符相同,还得判断数组第i+1和第j-1个是否为true(目的是为了判断aba中两a中的字符串是否为回文子串,如下图);

五部曲的第三步:dp数组的初始化;

boolean数组的默认值是null所以我们可以不用初始化或者可以初始化为false;

五部曲的第四步:确定遍历顺序;

注意遍历顺序,我们需要从j先往下遍历因为在数组里面找到一个true时,就需要判断往数组的左下角的布尔值,所以我们不同以往得从数组的列开始往下遍历

五部曲的第五步:举例推导dp数组;

以下是完整代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值