Skip to content

Commit f335134

Browse files
author
robot
committed
fix: TLE
1 parent a224069 commit f335134

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

problems/472.concatenated-words.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,27 @@ https://leetcode-cn.com/problems/concatenated-words/
6666

6767
由于我们并不知道 cat 这里断开,结果更大?还是 cats 这里断开结果更大?因此我们的做法是将其全部递归求出,然后取出最大值即可。如果我们直接这样递归的话,可能会超时,卡在最后一个测试用例上。一个简单的方式是记忆化递归,从而避免重复计算,经测试这种方法能够通过。
6868

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+
6985
## 关键点分析
7086

7187
- 前缀树
88+
- 记忆化搜索
89+
- 排序后 word **选择性**插入到 trie 中
7290

7391
## 代码
7492

0 commit comments

Comments
 (0)