zoukankan      html  css  js  c++  java
  • 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());
        }
    }
    
  • 相关阅读:
    多进程之数据安全问题
    windows 下安装 RabbitMQ
    springCloud Config分布式配置中心
    git配置ssh
    spring cloud Gateway 新一代网关
    spring cloud Hystrix 断路器
    spring cloud OpenFeign 服务接口调用
    Ribbon负载均衡服务调用
    consul服务注册与发现
    Eureka服务治理
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075034.html
Copyright © 2011-2022 走看看