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

时间:2019-05-14 11:13:55

标签: java algorithm dynamic-programming trie

我有以下任务:

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

我的建议是从数组构建Trie,并根据Trie的结论得出目标词是否可以导出。

此外,我已经看到动态编程适用于类似的问题。

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

1 个答案:

答案 0 :(得分:1)

动态编程应在此处应用。最佳子结构为:

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()];
        }