【Trie】LeetCode 208. 实现 Trie (前缀树)
题目链接
思路
字典树与多叉树非常类似,但是它本身结点不存储值。
什么意思呢?
多叉树结点一般是这样的:
class Tree{
int value;
Tree[] next;
}
而字典树的结点一般是这样的:
class Trie{
boolean isEnd;
Trie[] next = new Trie[26];
}
next
数组实际是一个字母映射表,通过这个表来查找字符。
举个例子,比如说要存储字符串 "lee"
代码
class Trie {
// current node is end node
boolean isEnd;
// Letters mapping table
Trie[] next;
public Trie() {
this.isEnd = false;
this.next = new Trie[26];
}
public void insert(String word) {
Trie node = this;
for(char c : word.toCharArray()){
if(node.next[c - 'a'] == null){
node.next[c - 'a'] = new Trie();
}
node = node.next[c - 'a'];
}
node.isEnd = true;
}
public boolean search(String word) {
Trie node = this;
for(char c : word.toCharArray()){
node = node.next[c - 'a'];
if(node == null){
return false;
}
}
return node.isEnd;
}
public boolean startsWith(String prefix) {
Trie node = this;
for(char c : prefix.toCharArray()){
node = node.next[c - 'a'];
if(node == null){
return false;
}
}
return true;
}
}