【算法学习】高级班六

在这里插入图片描述
以5为分界线,向两侧行走双指针
在这里插入图片描述
画勾的可以两两配对一条船了,画叉的进一步分析
左边的叉可以两个一组,右边的只能一个一条船
在这里插入图片描述
在这里插入图片描述
注意:相比较从两侧往中间走,这个不用挨个遍历,更简便
2.
在这里插入图片描述
dp表表示i到j范围上最长回文子序列,存在四种可能性:
在这里插入图片描述
3.
在这里插入图片描述

  • 求dp表
    在这里插入图片描述
    存在三种可能性:
    a. 先搞定i前面的字符,然后添一个和i一样的,即dp[i][j]=dp[i+1][j]+1
    b. 先搞定j后面的字符,然后添一个和j一样的,即dp[i][j]=dp[i][j-1]+1
    c. 若i=j,则dp[i][j]=dp[i+1][j-1]

  • 得到整个表后回推答案
    从右上角开始往回推,发现0到7范围的答案来自1到7,说明index=10的位置等于index=0,依此类推。
    在这里插入图片描述
    注意:如果用户只需要最后的答案,则可以空间压缩,但如果需要路径还原则不能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是上述需要遍历求解验证回文,则过程时间复杂度是O( N 3 N^{3} N3),可以优化valid过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • dp[i]表示i到最后的位置最小切割数
  • dp[i] = chas.length-i表示后面的字符串都不存在回文,即i到最后位置每个位置都需要切一下

在这里插入图片描述
dp[i][j]表示i到j范围到底有多少种保留方案。
在这里插入图片描述

  • 注意dp表中每个单元可能代表两种情况,即可能重复
  • 对于情况1,若i不等于j,则只考虑情况2,3,4,但若有情况1,则情况1为:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值