java编程贴纸问题_Java实现 LeetCode 691 贴纸拼词(DFS+map记录)
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记录)相关推荐
- Leetcode 691. 贴纸拼词 C++
Leetcode 691. 贴纸拼词 题目 我们给出了 N 种不同类型的贴纸.每个贴纸上都有一个小写的英文单词. 你希望从自己的贴纸集合中裁剪单个字母并重新排列它们,从而拼写出给定的目标字符串 tar ...
- java编程50实例_java编程实例大全及详解谜底(50例).doc
java编程实例大全及详解谜底(50例).doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 谓 ...
- java编程规范换行_Java编程规范整理
近期即将开始编码阶段,特地整理一下各方面的编程规范与命名约定,以便内部团队风格统一. 文章大多从网络上收集汇总而来,参考列表附在文章末尾. Java编程规范整理 基本命名规范 包命名 包名按照域名的范 ...
- 第二章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 ...
- java编程英语词汇_Java编程基础常见英语词汇
Java编程基础常见英语词汇 学编程英语基础要好,下面小编整理了Java编程基础常见英语词汇,希望对大家有帮助! OO:object-oriented ,面向对象 OOP: object-orient ...
- java编程兔子问题_JAVA编程题-用java解决兔子问题
题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 解答: 分析:从第一对兔子开始,第1个月1对兔 ...
- java编程的英文_Java编程基础常见英语词汇总编
Java编程基础常见英语词汇总编 以下是百分网小编收集的Java编程基础常见英语词汇,希望对您的学习有所帮助! Java编程基础常见英语词汇 OO:object-oriented ,面向对象 OOP: ...
- java编程思想 文献_JAVA编程思想英文参考文献和翻译
JAVA编程思想英文参考文献和翻译 时间:2016-11-15 14:44来源:毕业论文 虽然java是基于C++基础上的,但是它更是纯粹的面向对象语 "If we spoke a diff ...
- java编程是什么_java编程是什么?java编程有哪些特点?
大家要想学好java编程,首先就要知道java编程是什么?了解它的含义,才可以更好的只程序中体现,那么接下来,我们就来给大家讲解一下这方面的内容,让大家了解更多java的知识! Java是一种可以撰写 ...
最新文章
- php网站怎么缓存,一个php网站缓存代码分享
- java跨库join方案_集算器协助java处理多样性数据源之跨库关联
- VTK修炼之道39:图像平滑_各向异性滤波
- 【JUC】JDK1.8源码分析之ArrayBlockingQueue(三)
- 2139=数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- Implementation of the USB 3.0 controller not found!
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距
- c++驱动键鼠源码_Android移植FM芯片RDA5807M驱动指导
- 什么是阿姆达尔定律?
- POJ1860Currency Exchange(SPFA)
- 【Caffe安装】ImportError: No module named caffe 的解决方案
- 透彻理解cmake(含PRIVATE,PUBLIC,INTERFACE的详细解释)
- 整理好全球半导体公司,看看哪些你的上下游厂家
- postgresql中sql查询语句报错处理——ERROR: failed to find conversion function from unknown to text
- 音视频开发必看:“秒变萝莉音”,游戏中的变声是如何实现的
- 上传文件到GPU服务器,上传文件到GPU服务器并运行文件
- 安卓应用发布在各大应用市场方法整理
- 合肥市直计算机知识pdf,事业单位计算机专业知识整理(全)-20210419115129.pdf-原创力文档...
- python AIOT教程一1.必备多元函数微分学理论基础
- 有趣的新闻(1):你见过贝加尔湖冰冻气泡吗?