dp基础之区间型最长回文子串

区间型dp:一般是给定一个字符串或者序列,对其进行一些操作,最后一步将它去头或者去尾,剩下会是一个区间 [ i , j ],状态定义就是f[i][j],表示子序列[i,j]具有的最优性质。

问题一:给定一个字符串序列,找出其最长的子回文串序列的长度。
例:
输入:S = ['b','b','b','a','b']
输出:4(['b','b','b','b'])

问题分析:最优策略的子序列是T,长度时M
    case 1: M = 1,即T是一个字符的子序列
    case 2: M > 1,则必有T[0] = T[M-1]
设;T[0] = S[i],T[M-1] = S[j],则去掉T[0]和T[M-1]的T[1,...,M-2]必然是序列S[i+1,...,j-1]的最长子序列回文串。

子问题:要求S[i...,j]的最长回文子串
        如果S[i] = S[j],则需要知道S[i+1,...,j-1]的最长回文子串
        如果S[i] != S[j],则答案是S[i+1,...,j]或者S[i,...,j-1]的最长回文子串。
转移方程:
    设:f[i][j]是序列S[i,...,j]的最长回文子串的长度
    f[i][j] = max{f[i+1][j] , f[i][j-1] ,f[i+1][j-1] + 2 | s[i]=s[j]}
初始条件:
    一个字符也是一个回文串

    f[0][0],...,f[N-1][N-1] = 1
    
    如果S[i] = S[i+1],则f[i][i+1] = 2
    如果S[i] != S[i+1],则f[i][i+1] = 1 
计算顺序:
    不能按照之前的f[0...N]...f[N...N]的计算顺序,区间型dp应该按照长度j-i从小到大计算
长度1:f[0][0],f[1][1],......,f[N-1][N-1]
长度2:f[0][1],f[1][2],...,f[N-1][N-1]
.

.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值