题目
https://leetcode-cn.com/problems/implement-trie-prefix-tree/submissions/
字典树
class Trie {
private TrieNode root;
class TrieNode {
char c;
Map<Character, TrieNode> children = new HashMap<>();
boolean isWord = false;
public TrieNode (char c) {
this.c = c;
}
public TrieNode () {
}
}
/** Initialize your data structure here. */
public Trie() {
root = new TrieNode();
}
/** Inserts a word into the trie. */
public void insert(String word) {
Map<Character, TrieNode> child = root.children;
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
TrieNode next = null;
if (child.containsKey(c)) {
next = child.get(c);
} else {
next = new TrieNode(c);
child.put(c, next);
}
child = next.children;
if (i == word.length() - 1) {
next.isWord = true;
}
}
}
/** Returns if the word is in the trie. */
public boolean search(String word) {
TrieNode t = searchNode(word);
if (t != null && t.isWord) {
return true;
}
return false;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
public boolean startsWith(String prefix) {
TrieNode t = searchNode(prefix);
if (t == null) {
return false;
}
return true;
}
public TrieNode searchNode(String str) {
Map<Character, TrieNode> child = root.children;
TrieNode cur = null;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (child.containsKey(c)) {
cur = child.get(c);
child = cur.children;
} else {
return null;
}
}
return cur;
}
}