DP匹配模板题汇总

DP匹配模板题汇总一
问:S1改成S2的最小代价,插入一个字符代价ic,删除一个字符代价dc,更改一个字符代价rc
例:ab12cd3改成abcdf,ic=5,dc=3,rc=2,则最小代价是8
解:dp[i][j]表示S1[0…i]改成S2[0…j]的最小代价,注意dp[0][0]=0,表示空串变空串代价0
dpi0第0列表示S1[0…i]改成空串的代价,肯定是全部删除
dp0j第0行表示空串改成S2[0…j]的代价,肯定是全部增加
求出dpij矩阵最右下角即为答案
1)S1[0…i]先删去S1[i]变成S1[0…i-1],故dp[i][j]=dc+dp[i-1][j]
2)先改成S2[0…j-1]再增加S2[j],故dp[i][j]=dp[i][j-1]+ic
3)已知dp[i-1][j-1],若S1[i]==S2[j],则dp[i][j]=dp[i-1][j-1]
4)已知dp[i-1][j-1],若S1[i]!=S2[j],则dp[i][j]=dp[i-1][j-1]+rc

 

DP匹配模板题汇总二
问:判断S3是否为S1与S2的交错序列
例:S1='AB',S2='12',S3是AB12,A12B,A1B2,12AB,1A2B,1AB2时返回true,否则false
解:dp[i][j]表示S3[0…i+j-1]能否被S1[i]与S2[j]交错而成
dp[0][0]=True,因为两个空串能交错成空串
dp[i][0]就是当S2为空串时,只有S1进行交错,S1与S3的公共前缀部分是True,其余是False
dp[0][j]就是当S1为空串时,只有S2进行交错,S2与S3的公共前缀部分是True,其余是False
求出dpij矩阵最右下角即为答案
1)若dp[i-1][j]==True且S3[i+j-1]可与S1[i]匹配,则dp[i][j]=True
2)若dp[i][j-1]==True且S3[i+j-1]可与S2[j]匹配,则dp[i][j]=True
3)否则,dp[i][j]=False

 

DP匹配模板题汇总三
找S1与S2的最长公共子串长度
dpij表示S1[i]与S2[j]所形成的最长最长公共子串长度且S1[i]==S2[j]
dp00=0,表示两个空串的公共子序列长度为0
dpi0=0,表示S1[0…i]与空串的公共子序列长度为0
dp0j=0,表示空串与S2[0…j]的公共子序列长度为0
更新dpij:若S1[i]==S2[j],dp[i][j]=dp[i-1][j-1]+1,否则=0
例如:S1=1AB2345CD,S2=12345EF

 

DP匹配模板题汇总四
找S1与S2的最长公共子序列长度
dpij表示S1[i]与S2[j]所形成的最长公共子序列长度
dp00=0,表示两个空串的公共子序列长度为0
dpi0=0,表示S1[0…i]与空串的公共子序列长度为0
dp0j=0,表示空串与S2[0…j]的公共子序列长度为0
更新dpij:
若S1[i]!=S2[j],dp[i][j]取dp[i-1][j]与dp[i][j-1]较大值
否则,取dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+1中最大值
例如:S1=1AB2345CD,S2=12345EF

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值