题目链接
题目描述
注意点
- word 和 prefix 仅由小写英文字母组成
解答思路
- 首先要理解前缀树是什么,参照该篇文章【图解算法】模板+变式------带你彻底搞懂字典树(Trie树)
- 在了解前缀树是什么后,设计前缀树就会更加容易,因为本题中所有单词都仅由小写英文字母组成,所以哈希表只需要26个空间即可,若有些单词具有相同的前缀,则可视为它们有相同的父节点,也就是相当于构造一棵最大有26个子节点的二叉树,构造树的过程可以由以下图片表示:
代码
java
class Trie {
TrieNode root;
public Trie() {
root = new TrieNode();
}
public void insert(String word) {
TrieNode currNode = root;
for (char c : word.toCharArray()) {
if (currNode.childNode[c - 'a'] == null) {
currNode.childNode[c - 'a'] = new TrieNode();
}
currNode = currNode.childNode[c - 'a'];
}
currNode.isWord = true;
}
public boolean search(String word) {
TrieNode currNode = root;
for (char c : word.toCharArray()) {
if (currNode.childNode[c - 'a'] == null) {
return false;
}
currNode = currNode.childNode[c - 'a'];
}
if (!currNode.isWord) {
return false;
}
return true;
}
public boolean startsWith(String prefix) {
TrieNode currNode = root;
for (char c : prefix.toCharArray()) {
if (currNode.childNode[c - 'a'] == null) {
return false;
}
currNode = currNode.childNode[c - 'a'];
}
return true;
}
}
class TrieNode {
boolean isWord;
TrieNode[] childNode = new TrieNode[26];
}
关键点
- 学习前缀树的相关知识
- 构造前缀树的过程