leetcode 405周赛 最小代价构造字符串「动态规划」

3213. 最小代价构造字符串

题目描述:

给你一个目标字符串 target,一个字符串数组 words,以及一个对应的花费数组costs,每个word对应一个cost

你可以从words数组中选择任意数量的任意字符串,拼接起来,求拼接成target的最小花费

如果不能拼成target则输出-1

  • 1 <= target.length <= 5 * 104
  • 1 <= words.length == costs.length <= 5 * 104
  • 1 <= words[i].length <= target.length
  • 所有 words[i].length 的总和小于或等于 5 * 104
  • targetwords[i] 仅由小写英文字母组成。
  • 1 <= costs[i] <= 104

思路

考虑动态规划,设状态 d p [ i ] dp[i] dp[i]表示构造出 t a r g e t target target i i i位的最小花费

状态转移方程:

  • 假设 w o r d s [ j ] words[j] words[j]能匹配 t a r g e t [ i ] target[i] target[i] t a r g e t [ i + l e n j − 1 ] target[i+len_j-1] target[i+lenj1]
  • 则状态转移方程为 d p [ i + l e n j + 1 ] = m i n ( d p [ i + l e n j + 1 ] , d p [ i ] +   c o s t j ) dp[i+len_j+1] = min(dp[i+len_j+1], dp[i] + cost_j) dp[i+lenj+1]=min(dp[i+lenj+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值