Skip to content

Commit d224c37

Browse files
authored
Create 0691-stickers-to-spell-word.kt
1 parent d48f4b4 commit d224c37

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
fun minStickers(stickers: Array<String>, target: String): Int {
3+
val stickCount = HashMap<String, MutableMap<Char, Int>>().apply {
4+
stickers.forEach { s ->
5+
this[s] = s.groupingBy { it }
6+
.eachCount()
7+
.toMutableMap()
8+
}
9+
}
10+
11+
val dp = HashMap<String, Int>()
12+
13+
fun dfs(t: String, stick: MutableMap<Char, Int>): Int {
14+
dp[t]?.let {
15+
return it
16+
}
17+
18+
var res = if (stick.isEmpty()) 0 else 1
19+
val remainT = StringBuilder()
20+
for (c in t) {
21+
if (c in stick && stick[c]!! > 0) {
22+
stick[c] = stick[c]!! - 1
23+
} else {
24+
remainT.append(c)
25+
}
26+
}
27+
28+
if (remainT.length > 0) {
29+
val remainTS = remainT.toString()
30+
var used = Integer.MAX_VALUE
31+
for (s in stickCount.values) {
32+
if (remainTS[0]!! !in s)
33+
continue
34+
used = minOf(used, dfs(remainTS, s.toMutableMap()))
35+
}
36+
37+
dp[remainTS] = used
38+
res = if (used == Integer.MAX_VALUE ) Integer.MAX_VALUE else res + used
39+
}
40+
41+
return res
42+
}
43+
44+
45+
val res = dfs(target, mutableMapOf<Char, Int>())
46+
return if (res == Integer.MAX_VALUE) -1 else res
47+
}
48+
}

0 commit comments

Comments
 (0)