Interview Question - combine words using words

题大概是这样,一个INPUT STRING ARRAY1 比如CAT, DOG,一个INPUT STRING ARRAY 2, 比如GAT, DOC, CD, GOAT, BAD, COOL
要求第一个INPUT ARRAY的字母必须全部用,而且每个字母只能用一次,求其能组合成的INPUT STRING ARRAY2里的单词组合
比如上面这个例子,返回值会是{{GAT, DOC},{CD, GOAT}}

http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=201395

My code:

private int[] charSet = new int[26];
    private int charSum = 0;
    public List<List<String>> wordSearchAnagram(List<String> input1, List<String> input2) {
        for (String s : input1) {
            for (char c : s.toCharArray()) {
                charSet[c - 'a']++;
                charSum++;
            }
        }
        List<List<String>> ret = new ArrayList<List<String>>();
        search(0, input2, new ArrayList<String>(), ret, 0);
        return ret;
    }
    
    private void search(int begin, List<String> input2, List<String> group, List<List<String>> ret, int counter) {
        if (counter > charSum) {
            return;
        }
        else if (counter == charSum) {
            int[] temp = Arrays.copyOf(charSet, 26);
            for (String s : group) {
                for (char curr : s.toCharArray()) {
                    temp[curr - 'a']--;
                    if (temp[curr - 'a'] < 0) {
                        return;
                    }
                }
            }
            ret.add(new ArrayList<String>(group));
        }
        else {
            for (int i = begin; i < input2.size(); i++) {
                group.add(input2.get(i));
                search(i + 1, input2, group, ret, counter + input2.get(i).length());
                group.remove(group.size() - 1);
            }
        }
    }

注意,如果 dictionary 里面的单词可以重复使用,那么,
search(i, ...) 而不是 search(i + 1, ...)

Anyway, Good luck, Richardo! -- 09/27/2016

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • snap (1)find median from data stream** only use one tree ...
    秋_轩阅读 3,505评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 4,776评论 0 0
  • 语言的基础部分 程序是指令的集合,写程序就是写一系列的指令去控制计算机去做我们想做的事情。编译:将程序设计语言转换...
    Daniel01阅读 4,282评论 0 0