• Java实现 LeetCode 472 连接词


    472. 连接词

    给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词。

    连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的。

    示例:

    输入: [“cat”,“cats”,“catsdogcats”,“dog”,“dogcatsdog”,“hippopotamuses”,“rat”,“ratcatdogcat”]

    输出: [“catsdogcats”,“dogcatsdog”,“ratcatdogcat”]

    解释: “catsdogcats"由"cats”, “dog” 和 "cats"组成;
    “dogcatsdog"由"dog”, "cats"和"dog"组成;
    “ratcatdogcat"由"rat”, “cat”, "dog"和"cat"组成。
    说明:

    给定数组的元素总数不超过 10000。
    给定数组中元素的长度总和不超过 600000。
    所有输入字符串只包含小写字母。
    不需要考虑答案输出的顺序。

    class Solution {
        private Set<String> wordSet;
    
        public List<String> findAllConcatenatedWordsInADict(String[] words) {
    
            wordSet = new HashSet<>();
            for (String word : words) {
                wordSet.add(word);
            }
    
            List<String> result = new ArrayList<String>();
            Arrays.asList(words).parallelStream().forEach(word -> {
                if (dfs(word, 0, 0, new StringBuilder())) {
                    result.add(word);
                }
            });
    
            return result;
        }
    
        private boolean dfs(String word, int count, int start, StringBuilder sb) {
            for (int i = start; i < word.length(); i++) {
                sb.append(word.charAt(i));
                boolean isWord = wordSet.contains(sb.toString());
                if (isWord && dfs(word, count + 1, i + 1, new StringBuilder())) {
                    return true;
                }
            }
            return count > 1 && (wordSet.contains(sb.toString()) || start == word.length());
        }
    }
    
  • 相关阅读:
    laravel实践2.引入bootstrap
    laravel实践3.laravel Mix使用
    利用nginx 反向代理解决跨域问题
    前端压缩图片记录一下
    蒲文强java第 七 次作业
    蒲文强java第六次作业
    192403蒲文强——面向对象第五次作业
    浅析学习关于《现代软件工程——构建之法》第一章的总结
    第四次作业----两人结对编程
    第四次博客作业-结对项目
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946450.html
Copyright © 2020-2023  润新知