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 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值