Implement a trie with insert
, search
, and startsWith
methods.
Example:
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // returns true
trie.search("app"); // returns false
trie.startsWith("app"); // returns true
trie.insert("app");
trie.search("app"); // returns true
Note:
a-z
.实现字典树。
每个结点最多可以有26个子结点,同时给每个结点设置一个标志位用来指明当前结点是否为一个单词的结尾。
class Trie {
private Node root;
/** Initialize your data structure here. */
public Trie() {
root = new Node();
}
/** Inserts a word into the trie. */
public void insert(String word) {
Node p = root;
for (char c : word.toCharArray()) {
if (p.children[c - ‘a‘] == null) {
p.children[c - ‘a‘] = new Node();
}
p = p.children[c - ‘a‘];
}
p.end = true;
}
/** Returns if the word is in the trie. */
public boolean search(String word) {
Node p = prefix(word);
return p != null && p.end;
}
/**
* Returns if there is any word in the trie that starts with the given prefix.
*/
public boolean startsWith(String prefix) {
return prefix(prefix) != null;
}
private Node prefix(String word) {
Node p = root;
for (char c : word.toCharArray()) {
if (p.children[c - ‘a‘] == null) {
return null;
}
p = p.children[c - ‘a‘];
}
return p;
}
}
class Node {
Node[] children = new Node[26];
boolean end;
}
0208. Implement Trie (Prefix Tree) (M)
原文:https://www.cnblogs.com/mapoos/p/13445877.html