We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent a224069 commit f335134Copy full SHA for f335134
problems/472.concatenated-words.md
@@ -66,9 +66,27 @@ https://leetcode-cn.com/problems/concatenated-words/
66
67
由于我们并不知道 cat 这里断开,结果更大?还是 cats 这里断开结果更大?因此我们的做法是将其全部递归求出,然后取出最大值即可。如果我们直接这样递归的话,可能会超时,卡在最后一个测试用例上。一个简单的方式是记忆化递归,从而避免重复计算,经测试这种方法能够通过。
68
69
+2021-12-28 updated: 由于力扣增加了测试用例,导致了上面的仅仅依靠记忆化也是无法 AC 的。需要进一步优化。
70
+
71
+我们可以将 words 排序,这样就可以剪枝了。如何剪枝呢?直接用代码比较直观:
72
73
+```py
74
+for word in words:
75
+ if trie.cntWords(word) >= 2:
76
+ res.append(word)
77
+ else:
78
+ trie.insert(word)
79
+```
80
81
+如果如果 word 是合成词,那么没有必要将其加到 trie 中,因为这不影响答案,最多就是 cntWords 算出来的数字不对了。不过这道题对具体的数字不感兴趣,我们只关心是否大于 2。
82
83
+需要注意的是, 一定要排序。 否则如果合成词在前就没有优化效果了,达不到剪枝的目的。
84
85
## 关键点分析
86
87
- 前缀树
88
+- 记忆化搜索
89
+- 排序后 word **选择性**插入到 trie 中
90
91
## 代码
92
0 commit comments