大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。

题目大意

给出了 691. 贴纸拼词 - 图1种不同的贴纸 stickers,需要用这些贴纸(每种贴纸的数目都是无限的),裁剪拼接出目标字符串 target

求最少需要多少个贴纸。

画个图,解释一下示例一:

  1. stickers = ["with","example","science"],
  2. target = "thehat"

解题方法

本题解是对本题的官方题解,进行更详细的讲解。

我们使用一个数字 691. 贴纸拼词 - 图2标识 691. 贴纸拼词 - 图3 的每一个字符是否没被覆盖
解释:

  • 691. 贴纸拼词 - 图4的二进制表示中,每一位对应了 691. 贴纸拼词 - 图5中的每一个字符没被覆盖。()。
  • 因为 691. 贴纸拼词 - 图6的长度在 1 和 15 之间,因此 691. 贴纸拼词 - 图7可以用 691. 贴纸拼词 - 图8类型 (共 32 位)。
  • 注意 691. 贴纸拼词 - 图9中每一位的顺序和 691. 贴纸拼词 - 图10的顺序其实是反着的(691. 贴纸拼词 - 图11的最低位对应了691. 贴纸拼词 - 图12的最高位)

复杂度

  • 时间复杂度:$O(N)$,691. 贴纸拼词 - 图13是字符串长度。
  • 空间复杂度:$O(1)$,没用额外空间。

    总结

  1. 今天这个题主要是分情况讨论,想明白各种情况,思路清晰了的话,代码不难。

我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。