题目

分析
方法一:前缀哈希【通过】
思路
遍历句子中每个单词,查看单词前缀是否为词根。
算法
将所有词根 roots 存储到集合 Set 中。遍历所有单词,判断其前缀是否为词根。如果是,则使用前缀代替该单词;否则不改变该单词。
class Solution {
public String replaceWords(List<String> roots, String sentence) {
Set<String> rootset = new HashSet();
for (String root: roots) rootset.add(root);
StringBuilder ans = new StringBuilder();
for (String word: sentence.split("\\s+")) {
String prefix = "";
for (int i = 1; i <= word.length(); ++i) {
prefix = word.substring(0, i);
if (rootset.contains(prefix)) break;
}
if (ans.length() > 0) ans.append(" ");
ans.append(prefix);
}
return ans.toString();
}
}
复杂度分析
- 时间复杂度: O ( ∑ w i 2 ) O(\sum w_i^2) O(∑w

这篇博客详细介绍了LeetCode 648题目的解决方案,包括三种使用前缀树的方法:前缀哈希、前缀树(数组)和前缀树(map)。每种方法都提供了思路、算法分析以及时间空间复杂度的讨论,以Java实现。
最低0.47元/天 解锁文章
957

被折叠的 条评论
为什么被折叠?



