题目
分析
方法一:前缀哈希【通过】
思路
遍历句子中每个单词,查看单词前缀是否为词根。
算法
将所有词根 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(∑