691. 贴纸拼词

我们给出了 N 种不同类型的贴纸。每个贴纸上都有一个小写的英文单词。

你希望从自己的贴纸集合中裁剪单个字母并重新排列它们,从而拼写出给定的目标字符串 target。

如果你愿意的话,你可以不止一次地使用每一张贴纸,而且每一张贴纸的数量都是无限的。

拼出目标 target 所需的最小贴纸数量是多少?如果任务不可能,则返回 -1。

示例 1:

输入:

[“with”, “example”, “science”], “thehat”

输出:

3

解释:

我们可以使用 2 个 “with” 贴纸,和 1 个 “example” 贴纸。

把贴纸上的字母剪下来并重新排列后,就可以形成目标 “thehat“ 了。

此外,这是形成目标字符串所需的最小贴纸数量。

示例 2:

输入:

[“notice”, “possible”], “basicbasic”

输出:

-1

解释:

我们不能通过剪切给定贴纸的字母来形成目标“basicbasic”。

提示:

stickers 长度范围是 [1, 50]。

stickers 由小写英文单词组成(不带撇号)。

target 的长度在 [1, 15] 范围内,由小写字母组成。

在所有的测试案例中,所有的单词都是从 1000 个最常见的美国英语单词中随机选取的,目标是两个随机单词的串联。

时间限制可能比平时更具挑战性。预计 50 个贴纸的测试案例平均可在35ms内解决。

class Solution {

public int minStickers(String[] stickers, String target) {

int m = stickers.length;

int[][] mp = new int[m][26];

Map dp = new HashMap<>();

for (int i = 0; i < m; i++)

for (char c : stickers[i].toCharArray()) mp[i][c - 'a']++;

dp.put("", 0);

return helper(dp, mp, target);

}

private int helper(Map dp, int[][] mp, String target) {

if (dp.containsKey(target)) return dp.get(target);

int ans = Integer.MAX_VALUE, n = mp.length;

int[] tar = new int[26];

for (char c : target.toCharArray()) tar[c - 'a']++;

for (int i = 0; i < n; i++) {

if (mp[i][target.charAt(0) - 'a'] == 0) continue;

StringBuilder sb = new StringBuilder();

for (int j = 0; j < 26; j++) {

if (tar[j] > 0)

for (int k = 0; k < Math.max(0, tar[j] - mp[i][j]); k++)

sb.append((char) ('a' + j));

}

String s = sb.toString();

int tmp = helper(dp, mp, s);

if (tmp != -1) ans = Math.min(ans, 1 + tmp);

}

dp.put(target, ans == Integer.MAX_VALUE ? -1 : ans);

return dp.get(target);

}

}

java编程贴纸问题_Java实现 LeetCode 691 贴纸拼词(DFS+map记录)相关推荐

  1. Leetcode 691. 贴纸拼词 C++

    Leetcode 691. 贴纸拼词 题目 我们给出了 N 种不同类型的贴纸.每个贴纸上都有一个小写的英文单词. 你希望从自己的贴纸集合中裁剪单个字母并重新排列它们,从而拼写出给定的目标字符串 tar ...

  2. java编程50实例_java编程实例大全及详解谜底(50例).doc

    java编程实例大全及详解谜底(50例).doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 谓 ...

  3. java编程规范换行_Java编程规范整理

    近期即将开始编码阶段,特地整理一下各方面的编程规范与命名约定,以便内部团队风格统一. 文章大多从网络上收集汇总而来,参考列表附在文章末尾. Java编程规范整理 基本命名规范 包命名 包名按照域名的范 ...

  4. 第二章java编程基础测试题_Java编程基础测试题分享

    单选题:(每道题目2分) 1. 下列哪个声明是错误的?(B) A. int i=10; B. float f=1.1; //float f=1.1f C. double d=34.4; D. byte ...

  5. java编程英语词汇_Java编程基础常见英语词汇

    Java编程基础常见英语词汇 学编程英语基础要好,下面小编整理了Java编程基础常见英语词汇,希望对大家有帮助! OO:object-oriented ,面向对象 OOP: object-orient ...

  6. java编程兔子问题_JAVA编程题-用java解决兔子问题

    题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 解答: 分析:从第一对兔子开始,第1个月1对兔 ...

  7. java编程的英文_Java编程基础常见英语词汇总编

    Java编程基础常见英语词汇总编 以下是百分网小编收集的Java编程基础常见英语词汇,希望对您的学习有所帮助! Java编程基础常见英语词汇 OO:object-oriented ,面向对象 OOP: ...

  8. java编程思想 文献_JAVA编程思想英文参考文献和翻译

    JAVA编程思想英文参考文献和翻译 时间:2016-11-15 14:44来源:毕业论文 虽然java是基于C++基础上的,但是它更是纯粹的面向对象语 "If we spoke a diff ...

  9. java编程是什么_java编程是什么?java编程有哪些特点?

    大家要想学好java编程,首先就要知道java编程是什么?了解它的含义,才可以更好的只程序中体现,那么接下来,我们就来给大家讲解一下这方面的内容,让大家了解更多java的知识! Java是一种可以撰写 ...

最新文章

  1. php网站怎么缓存,一个php网站缓存代码分享
  2. java跨库join方案_集算器协助java处理多样性数据源之跨库关联
  3. VTK修炼之道39:图像平滑_各向异性滤波
  4. 【JUC】JDK1.8源码分析之ArrayBlockingQueue(三)
  5. 2139=数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
  6. Implementation of the USB 3.0 controller not found!
  7. 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距
  8. c++驱动键鼠源码_Android移植FM芯片RDA5807M驱动指导
  9. 什么是阿姆达尔定律?
  10. POJ1860Currency Exchange(SPFA)
  11. 【Caffe安装】ImportError: No module named caffe 的解决方案
  12. 透彻理解cmake(含PRIVATE,PUBLIC,INTERFACE的详细解释)
  13. 整理好全球半导体公司,看看哪些你的上下游厂家
  14. postgresql中sql查询语句报错处理——ERROR: failed to find conversion function from unknown to text
  15. 音视频开发必看:“秒变萝莉音”,游戏中的变声是如何实现的
  16. 上传文件到GPU服务器,上传文件到GPU服务器并运行文件
  17. 安卓应用发布在各大应用市场方法整理
  18. 合肥市直计算机知识pdf,事业单位计算机专业知识整理(全)-20210419115129.pdf-原创力文档...
  19. python AIOT教程一1.必备多元函数微分学理论基础
  20. 有趣的新闻(1):你见过贝加尔湖冰冻气泡吗?

热门文章

  1. 盲人(屏幕朗读、talkback)模式View点击失效
  2. fir 滤波参数的含义_详解FIR滤波器与IIR滤波器的具体区别
  3. 支持PHP8 JIT的PHP源码加密库发布!
  4. 使用-ubuntu 12.04 amd显卡驱动安装
  5. 小米平板5.0以上系统如何不root激活xposed框架的经验
  6. C++费解的开关(递推,位运算)
  7. ArcGIS处理NetCDF(.nc)的多维科学数据
  8. CentOs7安装Vim
  9. js宏编程--wps开放平台介绍
  10. Centos下载和安装教程