Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查单词是否可以由数组中的条目组成?_Java_Algorithm_Dynamic Programming_Trie - Fatal编程技术网

Java 如何检查单词是否可以由数组中的条目组成?

Java 如何检查单词是否可以由数组中的条目组成?,java,algorithm,dynamic-programming,trie,Java,Algorithm,Dynamic Programming,Trie,我有以下任务: 给出了“高速公路”一词。 检查该单词是否可以由数组中的条目组成: [ab、bc、Super、h、igh、way]-是; [ab,bc,Super,way]-否 我的建议是从数组中构建Trie,并根据Trie推断目标词是否可以派生 另外,我已经看到动态规划也适用于类似的问题 您能解释一下任务的最佳解决方案吗?这里应该应用动态规划。这里的最佳子结构是: dp[i]:如果s[0,i可以由提供数组中的条目组成 dp[i]|=dp[j]&&s[j,i是数组中的一个条目 pu

我有以下任务:

给出了“高速公路”一词。 检查该单词是否可以由数组中的条目组成: [ab、bc、Super、h、igh、way]-是; [ab,bc,Super,way]-否

我的建议是从数组中构建Trie,并根据Trie推断目标词是否可以派生

另外,我已经看到动态规划也适用于类似的问题


您能解释一下任务的最佳解决方案吗?

这里应该应用动态规划。这里的最佳子结构是:

dp[i]:如果s[0,i可以由提供数组中的条目组成

dp[i]|=dp[j]&&s[j,i是数组中的一个条目

        public boolean wordBreak(String s, List<String> wordDict) {
            Set<String> wordDictSet = new HashSet(wordDict);
            boolean[] dp = new boolean[s.length() + 1];
            dp[0] = true;
            for (int i = 1; i <= s.length(); i++) {
                for (int j = 0; j < i; j++) {
                    if (dp[j] && wordDictSet.contains(s.substring(j, i))) {
                        dp[i] = true;
                        break;
                    }
                }
            }
            return dp[s.length()];
        }

我建议您根据自己的建议开始工作,遇到任何问题时再回来。这有点过于宽泛,只包含您的作业。@f1sh我建议您删除您的评论。这不是我的作业,是我最近在Amazon@Pavelf1sh的评论恰到好处。你试过了兴。只是因为它不是为了学校:你想要答案,你有问题->这就是作业。然后这将是一个代码审查的问题。我的问题和继续并关闭他的问题之间有什么区别post@PavelTrie会使它变得复杂,并且不确定它是否能工作。在我看来,动态规划是最合适的。