要解决的问题:使用一个字符串分割 - 时间复杂度?
给定一个非空字符串s和一个字符串数组wordArr含有的非空字列表 ,确定是否s时,可以分割成一个的 空格分隔序列或更多的词典单词。您可能 假定字典不包含重复的单词。例如,给定s =“leetcode”,wordArr = [“leet”,“code”]。
返回true,因为“leetcode”可以分段为“leet code”。
在上面的问题,它会工作建立一个trie,每个字符串在wordArr
。然后,对于给定字符串s
中的每个字符,按照特里字母排序。如果一个trie分支终止,那么这个子字符串是完整的,因此将剩余的字符串传递给根,并递归地完成同样的事情。
这应该是O(N)时间和O(N)空间是否正确?我问,因为我正在处理的问题说这将是最佳方式的O(N^2)时间,我不知道我的方法有什么问题。
例如,如果s = "hello"
和wordArr = ["he", "ll", "ee", "zz", "o"]
,然后"he"
会在字典树的第一分支完成,"llo"
将被递归向上传递到根。然后,"ll"
将完成,因此"o"
被传递到trie的根。然后"o"
完成,这是s
的结尾,所以返回true。如果s
的末尾未完成,则返回false。
这是正确的吗?
如果'wordArr'不包含不相交的单词,可能会涉及回溯。假设'wordArr = [“lee”,“leet”,“code”]'。你会首先匹配'lee',然后浪费很多时间去寻找'tcode'的匹配项。 – chepner