zoukankan      html  css  js  c++  java
  • [LeetCode] 208(LintCode). Implement Trie(Prefix Tree)

    Implement a trie with insert, search, and startsWith methods.

     Notice

    You may assume that all inputs are consist of lowercase letters a-z.

    Example
    insert("lintcode")
    search("code")
    >>> false
    startsWith("lint")
    >>> true
    startsWith("linterror")
    >>> false
    insert("linterror")
    search("lintcode)
    >>> true
    startsWith("linterror")
    >>> true


     1 class Trie {
     2     class TrieNode{
     3         private char c;
     4         private Map<Character, TrieNode> map;
     5         private boolean isLeaf;   
     6         
     7         TrieNode() {
     8             this.map = new HashMap<>();
     9         }
    10         TrieNode(char c) {
    11             this.c = c;
    12             this.map = new HashMap<>();
    13         }
    14     }
    15     private TrieNode root;
    16     /** Initialize your data structure here. */
    17     public Trie() {
    18         root = new TrieNode();
    19     }
    20     
    21     /** Inserts a word into the trie. */
    22     public void insert(String word) {
    23         TrieNode currNode = root;
    24         for(int i = 0; i < word.length(); i++) {
    25             char currChar = word.charAt(i);
    26             if(!currNode.map.containsKey(currChar)) {
    27                 TrieNode newNode = new TrieNode(currChar);    
    28                 currNode.map.put(currChar, newNode);
    29                 currNode = newNode;
    30             }
    31             else {
    32                 currNode = currNode.map.get(currChar);
    33             }
    34             if(i == word.length() - 1) {
    35                 currNode.isLeaf = true;
    36             }
    37         }
    38     }
    39     
    40     /** Returns if the word is in the trie. */
    41     public boolean search(String word) {
    42         TrieNode currNode = root;
    43         for(int i = 0; i < word.length(); i++) {
    44             if(!currNode.map.containsKey(word.charAt(i))) {
    45                 return false;
    46             }
    47             currNode = currNode.map.get(word.charAt(i));
    48             if( i == word.length() - 1 && !currNode.isLeaf) {
    49                 return false;
    50             }
    51         }
    52         return true;
    53     }
    54     
    55     /** Returns if there is any word in the trie that starts with the given prefix. */
    56     public boolean startsWith(String prefix) {
    57         TrieNode currNode = root;
    58         for(int i = 0; i < prefix.length(); i++) {
    59             if(!currNode.map.containsKey(prefix.charAt(i))) {
    60                 return false;
    61             }
    62             currNode = currNode.map.get(prefix.charAt(i));
    63         }
    64         return true;        
    65     }
    66 }
    67 
    68 /**
    69  * Your Trie object will be instantiated and called as such:
    70  * Trie obj = new Trie();
    71  * obj.insert(word);
    72  * boolean param_2 = obj.search(word);
    73  * boolean param_3 = obj.startsWith(prefix);
    74  */
     
  • 相关阅读:
    验证身份证
    base64.js
    mysql常用操作
    drop、truncate和delete的区别
    安装mysql
    一些常用计算
    nuxt+vant+rem项目构建
    vue2安装sass 预编译
    vant ui rem配置流程
    关于vue项目和内嵌iframe页面之间的通信问题
  • 原文地址:https://www.cnblogs.com/lz87/p/6932152.html
Copyright © 2011-2022 走看看