Implement a trie with
insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters
You may assume that all inputs are consist of lowercase letters
a-z
.
Solution: See below.
Further reading: http://en.wikipedia.org/wiki/Trie
Further reading: http://en.wikipedia.org/wiki/Trie
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | class TrieNode { char ch; boolean isWord = false; TrieNode[] children = null; // Initialize your data structure here. public TrieNode() { } public TrieNode(char c) { this.ch = c; } } public class Trie { private TrieNode root; public Trie() { root = new TrieNode(); } // Inserts a word into the trie. public void insert(String word) { if (word == null || word.length() == 0) { return; } TrieNode node = root; for (int i = 0; i < word.length(); i++) { if (node.children == null) { node.children = new TrieNode[26]; } int idx = word.charAt(i) - 'a'; if (node.children[idx] == null) { node.children[idx] = new TrieNode(word.charAt(i)); } node = node.children[idx]; if (i == word.length() - 1) { node.isWord = true; } } } // Returns if the word is in the trie. public boolean search(String word) { if (word == null || word.length() == 0) { return false; } TrieNode node = root; for (int i = 0; i < word.length(); i++) { if (node.children == null) { return false; } int idx = word.charAt(i) - 'a'; if (node.children[idx] == null) { return false; } if ( i == word.length() - 1 && node.children[idx].isWord == false ) { return false; } node = node.children[idx]; } return true; } // Returns if there is any word in the trie // that starts with the given prefix. public boolean startsWith(String prefix) { if (prefix == null || prefix.length() == 0) { return false; } TrieNode node = root; for (int i = 0; i < prefix.length(); i++) { if (node.children == null) { return false; } int idx = prefix.charAt(i) - 'a'; if (node.children[idx] == null) { return false; } node = node.children[idx]; } return true; } } // Your Trie object will be instantiated and called as such: // Trie trie = new Trie(); // trie.insert("somestring"); // trie.search("key"); |
No comments:
Post a Comment