Leetcode 208. Implement Trie (Prefix Tree)

来源:互联网 发布:node.js实战 第1季 编辑:程序博客网 时间:2024/06/05 06:37

question

Leetcode 208. Implement Trie (Prefix Tree)

mplement a trie with insertsearch, and startsWith methods.


Analysis:

For the trie, we need to apply insert, search, and startWith which is to find the prefix in a string

http://dongxicheng.org/structure/trietree/

http://www.programcreek.com/2014/05/leetcode-implement-trie-prefix-tree-java/


Code

class TrieNode {    // Initialize your data structure here.    char c;    HashMap<Character, TrieNode> children = new HashMap<Character, TrieNode>();    boolean isLeaf;    public TrieNode() {    }    //This is to provide a char to define a trieNode    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) {      HashMap<Character, TrieNode> children = root.children;      for(int i = 0; i < word.length(); i++){        char c = word.charAt(i);        TrieNode t;        if(children.containsKey(c)){          t = children.get(c);        }        else{          t = new TrieNode(c);          children.put(c,t);        }        children = t.children;        //This is to set the leaf node        if(i == word.length() - 1)          t.isLeaf =true;      }    }    // Returns if the word is in the trie.    public boolean search(String word) {      TrieNode t = searchNode(word);      if(t != null && t.isLeaf)        return true;      else        return false;    }    // Returns if there is any word in the trie    // that starts with the given prefix.    public boolean startsWith(String prefix) {      if(searchNode(prefix) == null)        return false;      else        return true;    }    public TrieNode searchNode(String str){        Map<Character, TrieNode> children = root.children;        TrieNode t = null;        for(int i=0; i<str.length(); i++){            char c = str.charAt(i);            if(children.containsKey(c)){                t = children.get(c);                children = t.children;            }else{              //if it return null, it means that we can not find this word                return null;            }        }        return t;    }}// Your Trie object will be instantiated and called as such:// Trie trie = new Trie();// trie.insert("somestring");// trie.search("key");

文章内容 切换到MarkDown编辑器
0 0