1from functools import lru_cache2from collections import Counter345class Solution(object):6def minStickers(self, stickers, target):7counter = [Counter(sticker) for sticker in stickers]8n = len(counter)910@lru_cache(None)11def dfs(target):12if not target:13return 014targ_counter = Counter(target)15res = float("inf")16# using sticker[i] if it contains the first letter of target17for i in range(n):18if counter[i][target[0]] == 0:19continue20s = ""21for j in "abcdefghijklmnopqrstuvwxyz":22s += j * max(targ_counter[j] - counter[i][j], 0)23res = min(res, 1 + dfs(s)) if dfs(s) != -1 else res24return -1 if res == float("inf") else res2526return dfs(target)