Implement a trie with insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z
.
实现一个字典树。
好久不做题,没感觉啊,TreeNode用一个布尔变量表示是否是一个合法单词的结尾即可,一开始还用cnt来计数,search的时候比较麻烦。
class TrieNode { // Initialize your data structure here. TrieNode [] next; boolean valid; public TrieNode() { next = new TrieNode[26]; valid=false; } } public class Trie { private TrieNode root; public Trie() { root = new TrieNode(); } // Inserts a word into the trie. public void insert(String word) { TrieNode ptr = root; for(char c:word.toCharArray()){ if(ptr.next[c-'a']==null){ ptr.next[c-'a'] = new TrieNode(); } ptr=ptr.next[c-'a']; } ptr.valid=true; } // Returns if the word is in the trie. public boolean search(String word) { int last = 0; TrieNode ptr = root; for(char c:word.toCharArray()){ if(ptr==null||ptr.next[c-'a']==null){ return false; } ptr=ptr.next[c-'a']; } return ptr.valid; } // Returns if there is any word in the trie // that starts with the given prefix. public boolean startsWith(String prefix) { TrieNode ptr = root; for(char c:prefix.toCharArray()){ if(ptr==null||ptr.next[c-'a']==null){ return false; } ptr=ptr.next[c-'a']; } return true; } } // Your Trie object will be instantiated and called as such: // Trie trie = new Trie(); // trie.insert("somestring"); // trie.search("key");