这是691。贴纸在leetcode上拼写,这很困难。
标签:“内存搜索”,“ DFS”,“状态压缩”,“爆炸搜索”
我们有$ n $的不同贴纸。east贴纸有一个小写的英语单词。
您想拼写一个给定的字符串以从收集的贴纸上切一个字母并重新安排它们。如果您愿意,可以多次使用每个贴纸,并且每个贴纸的数量无限。
返回您需要拼写的最小贴纸。如果任务是不可能的,请返回$ -1 $。
注意:在所有测试用例中,所有单词都是从$ 1000和$的最常见的美国英语单词中随机选择的,并被选为两个随机单词的连接。
示例1:
示例2:
暗示:
为了方便起见,我们记得$ ss =贴纸$,$ t = target $,其中$ t $的长度为$ n $。
我们使用$ state $(类型变量)来表示当前的$ t $:如果$ t [i] $组成,那么$ i $ digit是$ 1 $ at $ 1 $,否则将是$ 1 $,否则为$ 1 $,否则为$ 0 $。
一开始,如果您最终可以弥补$ t $,那将是。
因为每个$ ss [i] $可以多次使用,对于特定的$状态$,它会转换为最终的最小步骤固定,因此我们可以使用“内存搜索”来避免使用samerepeat搜索$ state的$ state$。
在单步搜索过程中,我们列举了$ state $ per $ ss [i] $。假设由某个$ ss [i] $获得的新状态是$ nstate $,则所有最小值的最低限度为$ f [state] $。
代码:
这是我们“通过Leetcode”系列的第一篇文章。该系列始于2021/01/01。从开始开始时的起始代码开始,总共有1916年的问题。该主题已经完成。
在这一系列文章中,除了解释问题 - 解决想法之外,还将尽可能多地提供最简洁的代码。如果涉及通信,将有相应的代码模板。
为了使学生更容易在计算机上调试和提交代码,我建立了一个相关的仓库:https://github.com/sharingsource/logicstack-letcode。
在仓库地址中,您可以看到一系列文章的解释链接,一系列文章的相应代码,leetcode的原始链接以及其他首选解决方案。
原始:https://juejin.cn/post/7097431542317711397