• 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 }
  • 相关阅读:
    软工个人项目
    软工第一次个人博客作业
    软工第一次热身作业
    OO第四单元作业总结
    OO第三单元作业总结
    2019-oo-第二次总结
    提问回顾与个人总结
    Github Actions 实践
    北航软工结对项目
    北航个人博客作业-软件案例分析
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10203025.html
Copyright © 2020-2023  润新知