avatar
m*o
1
Suppose we are given N different types of stickers. Each sticker type has a
word on it, for example, we could have 4 sticker types that say “math”, “
science”, “english”, and “history” respectively. You would like to
spell out the target word “learning” by cutting out individual letters
from your collection of stickers and rearranging them. If you are allowed to
use more than one sticker of a given type to form the target word, what is
the minimum number of total stickers you will require? In the example above,
one possible optimal solution is to use 1 “math” sticker, 2 “english”
stickers, and 1 “history” sticker, for a total of 4 stickers.
这题咋做...没什么很好的思路,难道用dfs?
avatar
t*b
2
统计字母然后背包?

a
to
is
above,

【在 m******o 的大作中提到】
: Suppose we are given N different types of stickers. Each sticker type has a
: word on it, for example, we could have 4 sticker types that say “math”, “
: science”, “english”, and “history” respectively. You would like to
: spell out the target word “learning” by cutting out individual letters
: from your collection of stickers and rearranging them. If you are allowed to
: use more than one sticker of a given type to form the target word, what is
: the minimum number of total stickers you will require? In the example above,
: one possible optimal solution is to use 1 “math” sticker, 2 “english”
: stickers, and 1 “history” sticker, for a total of 4 stickers.
: 这题咋做...没什么很好的思路,难道用dfs?

avatar
O*9
3
这题很像 minimum window substring ,应该是要用到hash table记录 target word
中每个letter出现的次数,然后计算count, 当count == 0 的时候就是一个解
好吧,我就是刷到 minimum window substring 这题 ,来坛子逛一圈的。。。
avatar
t*b
4
一点都不像啊
sliding window是双指针模板

word

【在 O*********9 的大作中提到】
: 这题很像 minimum window substring ,应该是要用到hash table记录 target word
: 中每个letter出现的次数,然后计算count, 当count == 0 的时候就是一个解
: 好吧,我就是刷到 minimum window substring 这题 ,来坛子逛一圈的。。。

avatar
O*9
5

额,我错了,刷题刷晕了

【在 t****b 的大作中提到】
: 一点都不像啊
: sliding window是双指针模板
:
: word

avatar
t*b
6
刚发现咱俩是一个队的 老头去哪喝酒了?

【在 O*********9 的大作中提到】
:
: 额,我错了,刷题刷晕了

avatar
O*9
7

应该是在cupertino吧,蛤蛤

【在 t****b 的大作中提到】
: 刚发现咱俩是一个队的 老头去哪喝酒了?
avatar
m*o
8

昨天面试碰到的题,面试官说什么recursive来着...完全没思路。

【在 t****b 的大作中提到】
: 统计字母然后背包?
:
: a
: to
: is
: above,

avatar
m*o
9
Ken哥呢,天天刷poj,帮我讲解一下嘛
avatar
f*r
10
可以递归,先选一张sticker,这样你要覆盖的字母就减小。这个方案编程容易些, 但
是这个方式不好,效率低,因为同样的字母集合会被你算很多次
所以一个好点的办法是DP,bottom up。
第N轮,计算如果只用N张sticker,能覆盖多少需要的字母 (只保留有意义的选项)
当你在n轮找到能覆盖target word,你就知道需要n张

【在 m******o 的大作中提到】
: Ken哥呢,天天刷poj,帮我讲解一下嘛
avatar
m*o
11

第N轮N张sticker怎么选呢,可以全部选同一张N次也可以任意取啊。

【在 f*********r 的大作中提到】
: 可以递归,先选一张sticker,这样你要覆盖的字母就减小。这个方案编程容易些, 但
: 是这个方式不好,效率低,因为同样的字母集合会被你算很多次
: 所以一个好点的办法是DP,bottom up。
: 第N轮,计算如果只用N张sticker,能覆盖多少需要的字母 (只保留有意义的选项)
: 当你在n轮找到能覆盖target word,你就知道需要n张

avatar
z*t
12
主要是一个组合的问题,定义函数 Exist(vector& cards, int numToUse,
string target)。给定cards情况下,可以使用numToUse张,函数返回是否能把target
里所有char都找到。函数就是
int numCardNeeded = 0;
while (!Exist(cards, numCardNeeded, target)
{
numCardNeeded++;
}
return numCardNeeded;
Exist的实现可以用递归穷举,或者DP(作用不大,因为已知卡片组合比如C1一张C2四
张,可以直接计算出五张加起来每个字符有多少),看出题人的提示了。可以优化一下
,比如传递int[26]来代替string
整体上是一个BFS,search的每一层利用递归构建所有可能性。
avatar
z*n
13
面试的话,这题写BFS+Memorization (int [L] )加一点简单的pruning 应该就算过了
吧。不是搞竞赛的,要求不能太高吧。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。