String painter--区间dp

文章讲述了如何使用动态规划解决字符串转换问题,通过每次选择两端点相同的区间进行替换,最小化将a字符串转换成b所需的最小操作次数,同时优化了当源字符等于目标字符时的操作策略。
摘要由CSDN通过智能技术生成

String painter

题目大意

给你a,b两个长度相等的字符串,每次操作可以选择将a的一个区间全变成同一个字符,求将a变成b的最小操作次数

题目思路:

首先考虑最坏的情况,无非是不考虑a字符,都一个一个变,这样操作次数为n。那么在这样的操作方案下,可以想到,"每次只替换一个字符"可以等价于"每次替换一个区间然后这个区间的其他字符再被其它操作选择性覆盖",只要区间选得合适,那么后面的操作就可以不用替换掉这个字符从而节省操作。可以想到只要选取两端点相同的区间就行,这样可以节省一次操作。如果a[i]==b[i]本就不用替换,那么究竟是否还依然要选择一个两端点相等的区间呢?如果本就不用替换,其实选择一个区间a[i,k]替换与只选择a[k]替换都是同样的操作,我们可以只选择a[k]替换,也就是当a[i]==b[i]时就不用管i了。设dp[l,r]为区间[l,r]的最小操作次数,则if(a[l]!=b[l]) {dp[l,r]=r-l+1,if(b[l]==b[k]) dp[l,r]=min(dp[l,r],dp[l+1,k-1]+1+dp[k+1,r])}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值