LeetCode 五月打卡-day14

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day14相关的知识,希望对你有一定的参考价值。

691. 贴纸拼词
我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。

您想要拼写出给定的字符串 target ,方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意,你可以多次使用每个贴纸,每个贴纸的数量是无限的。

返回你需要拼出 target 的最小贴纸数量。如果任务不可能,则返回 -1 。

注意:在所有的测试用例中,所有的单词都是从 1000 个最常见的美国英语单词中随机选择的,并且 target 被选择为两个随机单词的连接。

参考题解:
【宫水三叶】DFS + 记忆化搜索 运用题

class Solution 
    int N = 20, M = 1 << 20, INF = 50;
    int[] f = new int[M];
    String[] ss;
    String t;
    int dfs(int state) 
        int n = t.length();
        if (state == ((1 << n) - 1)) return 0;
        if (f[state] != -1) return f[state];
        int ans = INF;
        for (String s : ss) 
            int nstate = state;
            out:for (char c : s.toCharArray()) 
                for (int i = 0; i < n; i++) 
                    if (t.charAt(i) == c && ((nstate >> i) & 1) == 0) 
                        nstate |= (1 << i);
                        continue out;
                    
                
            
            if (nstate != state) ans = Math.min(ans, dfs(nstate) + 1);
        
        return f[state] = ans;
    
    public int minStickers(String[] stickers, String target) 
        ss = stickers; t = target;
        Arrays.fill(f, -1);
        int ans = dfs(0);
        return ans == INF ? -1 : ans;
    


以上是关于LeetCode 五月打卡-day14的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day01

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day20

LeetCode 五月打卡-day08

LeetCode 五月打卡-day13