【发布时间】:2017-07-19 19:44:03
【问题描述】:
待解决的问题:
给定一个非空字符串 s 和一个包含列表的字符串数组 wordArr 非空词,判断 s 是否可以分割成 一个或多个字典单词的空格分隔序列。你可以 假设字典不包含重复的单词。
例如,给定 s = "leetcode", wordArr = ["leet", "code"]。
返回 true 因为“leetcode”可以被分割为“leet code”。
在上述问题中,构建一个包含wordArr 中每个字符串的trie 是否可行。然后,对于给定字符串s 中的每个字符,继续尝试。如果一个 trie 分支终止,那么这个子字符串是完整的,所以将剩余的字符串传递给根并递归地做完全相同的事情。
这应该是 O(N) 时间和 O(N) 空间对吗?我问是因为我正在处理的问题说这将以最佳方式是 O(N^2) 时间,我不确定我的方法有什么问题。
例如,如果s = "hello"和wordArr = ["he", "ll", "ee", "zz", "o"],那么"he"将在trie的第一个分支中完成,"llo"将递归地传递给根。然后,"ll" 将完成,所以"o" 被传递到 trie 的根。那么"o"就完成了,也就是s的结束,所以返回true。如果s 的结尾未完成,则返回 false。
这对吗?
【问题讨论】:
-
如果
wordArr不包含不相交的词,则可能涉及回溯。假设wordArr = ["lee", "leet", "code"]。你会先匹配lee,然后浪费大量时间来寻找tcode的匹配。
标签: string algorithm time-complexity trie substring