208. Implement Trie (Prefix Tree)
Medium
Trie (we pronounce "try") or prefix tree is a tree data structure used to retrieve a key in a strings dataset. There are various applications of this very efficient data structure, such as autocomplete and spellchecker.
Implement the Trie class:
Trie()initializes the trie object.void insert(String word)inserts the stringwordto the trie.boolean search(String word)returnstrueif the stringwordis in the trie (i.e., was inserted before), andfalseotherwise.boolean startsWith(String prefix)returnstrueif there is a previously inserted stringwordthat has the prefixprefix, andfalseotherwise.
Example 1:
Input ["Trie", "insert", "search", "search", "startsWith", "insert", "search"] [[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]] Output [null, null, true, false, true, null, true] Explanation Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // return True trie.search("app"); // return False trie.startsWith("app"); // return True trie.insert("app"); trie.search("app"); // return True
Constraints:
1 <= word.length, prefix.length <= 2000wordandprefixconsist of lowercase English letters.- At most
3 * 104calls will be made toinsert,search, andstartsWith.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | class Trie { class TrieNode{ boolean isEnd; TrieNode[] children; TrieNode(){ isEnd = false; children = new TrieNode[26]; } } 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(char c : word.toCharArray()){ if(p.children[c-'a']==null){ p.children[c-'a'] = new TrieNode(); } p = p.children[c-'a'] ; } p.isEnd = true; } /** Returns if the word is in the trie. */ public boolean search(String word) { TrieNode p = root; for(char c : word.toCharArray()){ if(p.children[c-'a']==null){ return false; } p = p.children[c-'a'] ; } return p.isEnd == true; } /** Returns if there is any word in the trie that starts with the given prefix. */ public boolean startsWith(String prefix) { TrieNode p = root; for(char c : prefix.toCharArray()){ if(p.children[c-'a']==null){ return false; } p = p.children[c-'a'] ; } 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); */ |
No comments:
Post a Comment