题目:https://leetcode.com/problems/implement-trie-prefix-tree/#/description
Implement a trie with insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z
.
基本的前缀树,术语trie来源于"retrieval."发音为[tri]("tree").然儿,它通常发音为[tra]"try".一张图说明问题
Java实现:
class TrieNode
{
TrieNode[] children = new TrieNode[26];
boolean mark;
char c;
public TrieNode(){}
public TrieNode(char c)
{
this.c = c;
}
}
public class Trie
{
private TrieNode root;
/** Initialize your data structure here. */
public Trie()
{
root = new TrieNode();
}
/** Inserts a word into the trie. */
public void insert(String word)
{
TrieNode p = root;
for(int i=0; i<word.length(); ++i)
{
char c = word.charAt(i);
if(p.children[c-'a']==null)
p.children[c-'a'] = new TrieNode(c);
p = p.children[c-'a'];
}
p.mark = true;
}
/** Returns if the word is in the trie. */
public boolean search(String word)
{
TrieNode p = root;
for(int i=0; i<word.length(); ++i)
{
char c = word.charAt(i);
if(p.children[c-'a']==null)
return false;
p = p.children[c-'a'];
}
return p.mark;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
public boolean startsWith(String prefix)
{
TrieNode p = root;
for(int i=0; i<prefix.length(); ++i)
{
char c = prefix.charAt(i);
p = p.children[c-'a'];
if(p==null)
return false;
}
return true;
}
}
/**
* Your Trie object will be instantiated and called as such:
* Trie obj = new Trie();
* obj.insert(word);
* boolean param_2 = obj.search(word);
* boolean param_3 = obj.startsWith(prefix);
*/