• 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());
        }
    }
    
  • 相关阅读:
    [转] Spring的session管理
    C# 屏幕截图
    C#数字图像处理图像旋转图片加角度
    C#委托
    C# HttpWebRequest 添加Cookie验证
    网站
    前端获取URL中的值
    从下往上画的文字
    测试SSL的网站
    Tomcat-绑定证书的两种方法
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075034.html
Copyright © 2020-2023  润新知