力扣回文字串的动态规划解法

1,求字符串中,回文子串的个数

647. 回文子串 :给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。求回文子串的个数

输入:"aaa" 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

Dp[i][j]表示[i,j]是否为回文字串

如果s[i]不等于s[j],则一定不是回文字串 dp[i][j]=false

如果s[i]等于s[j]:

1,aa ;j-i=0   aba: j-i=1  都是回文字串

2,aaabaaa  :j-i>1的时候需要考虑,[i+1,j-1]是回文,dp[i][j]才是true

 遍历顺序:j从0开始,i也是从0开始

2,求不连续的回文子串的长度

516,最长回文子序列:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。 

求不连续的回文子串的长度

示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。

dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。

如果s[i]==s[j] 则长度加2   dp[i][j]=dp[i+1][j-1]+2

不相等(取s[i]或s[j]):dp[i][j]=max(dp[i+1][j],dp[i][j-1])

 

 遍历顺序为:i从i2到i0  ,j从(i+1)到len-1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值