zoukankan      html  css  js  c++  java
  • Leetcode 208.实现前缀树

    实现前缀树

    实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。

    示例:

    Trie trie = new Trie();

    trie.insert("apple");

    trie.search("apple"); // 返回 true

    trie.search("app"); // 返回 false

    trie.startsWith("app"); // 返回 true

    trie.insert("app");

    trie.search("app"); // 返回 true

    说明:

    • 你可以假设所有的输入都是由小写字母 a-z 构成的。
    • 保证所有输入均为非空字符串。
     1 dclass TrieNode{
     2         char c;
     3         boolean leaf;
     4         HashMap<Character,TrieNode> children=new HashMap<Character,TrieNode>();
     5 public TrieNode(char c){
     6         this.c=c;
     7         }
     8 public TrieNode(){};
     9         }
    10 
    11 public class Trie{
    12     private TrieNode root;
    13     public Trie(){
    14         root=new TrieNode();
    15     }
    16 
    17     public void insert(String word){
    18         Map<Character,TrieNode> children=root.children;
    19         for(int i=0;i<word.length();i++){
    20             char c=word.charAt(i);
    21             TrieNode t;
    22             if(children.containsKey(c)){
    23                 t=children.get(c);
    24             }else{
    25                 t=new TrieNode(c);
    26                 children.put(c,t);
    27             }
    28             children=t.children;
    29             if(i==word.length()-1)
    30                 t.leaf=true;
    31         }
    32     }
    33 
    34     public boolean search(String word){
    35         TrieNode t=searchNode(word);
    36         return t!=null && t.leaf;
    37     }
    38 
    39     private TrieNode searchNode(String word){
    40         Map<Character,TrieNode> children=root.children;
    41         TrieNode t=null;
    42         for(int i=0;i<word.length();i++){
    43             char c=word.charAt(i);
    44             if(!children.containsKey(c)) return null;
    45             t=children.get(c);
    46             children=t.children;
    47         }
    48         return t;
    49     }
    50 
    51     public boolean startsWith(String prefix){
    52         return searchNode(prefix)!=null;
    53     }
    54 }
  • 相关阅读:
    【转载】Python未来互联网主流语言! . 天高地厚
    Android系统Intent的使用(转)
    android:获取联系人信息(姓名和电话)
    CMNET和CMWAP区别(转)
    Android界面开发推荐颜色
    android : framelayout 研究
    android : drag and drop ui
    android 四种模式研究之一
    ListView与CheckBox,EditText,Button结合
    android 之 custom view(一)
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10203025.html
Copyright © 2011-2022 走看看