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
target
和words[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+lenj−1],
- 则状态转移方程为 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