【LeetCode】5. 最长回文子串 动态规划、中心扩展、马拉车算法 多解法详解

最长回文子串

【LeetCode】5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

动态规划

  1. 确定dp含义:

dp[i] [j]表示:字符串s,以i下标开始,j下标结束,是不是回文

  1. 确定dp递推公式

​ 因为以j下标结束,则j一定要大于等于i

​ 如果i下标和j下标相邻,即j - i == 1,当对应下标字符相等时为回文,即dp[i] [j] = (arr[i] == arr[j])

​ 如果i下标和j下标不相邻,则当两下标之间的最大子串是回文且下标i和下标j对应字符相等时为回文,即dp[i] [j] = dp[i+1] [j-1] && (arr[i] == arr[j])

  1. dp初始化

​ 单个字符的都是回文

for(int i = 0; i < n; i++) {
   
   
   dp[i][i]  = true;
}
  1. 确定遍历顺序

    从递归公式中dp[i] [j]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值