Implement a trie with insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z
.
- class TrieNode {
- // Initialize your data structure here.
- public TrieNode() {}
- Map<Character,TrieNode> next = new HashMap<Character,TrieNode>();
- char c='\0';
- boolean isEnd = false;
- public TrieNode(char c) {
- this.c = c;
- }
- }
- public class Trie {
- private TrieNode root;
- public Trie() {
- root = new TrieNode();
- }
- // Inserts a word into the trie.
- public void insert(String word) {
- TrieNode cur = root;
- for(int i=0;i<word.length();i++){
- if(!cur.next.containsKey(word.charAt(i))){
- cur.next.put(word.charAt(i), new TrieNode(word.charAt(i)));
- }
- cur = cur.next.get(word.charAt(i));
- }
- cur.isEnd = true;
- }
- // Returns if the word is in the trie.
- public boolean search(String word) {
- TrieNode cur = root;
- for(int i=0;i<word.length();i++){
- if(cur.next.containsKey(word.charAt(i))){
- cur = cur.next.get(word.charAt(i));
- }else{
- return false;
- }
- }
- if(cur.isEnd) 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 cur = root;
- for(int i=0;i<prefix.length();i++){
- if(cur.next.containsKey(prefix.charAt(i))){
- cur = cur.next.get(prefix.charAt(i));
- }else{
- return false;
- }
- }
- return true;
- }
- }
- // Your Trie object will be instantiated and called as such:
- // Trie trie = new Trie();
- // trie.insert("somestring");
- // trie.search("key");
原文链接http://blog.youkuaiyun.com/crazy__chen/article/details/46575533