2022-4-7 高频面试题

Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。

请你实现 Trie 类:

  • Trie() 初始化前缀树对象。
  • void insert(String word) 向前缀树中插入字符串 word 。
  • boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
  • boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
 1 class Trie {
 2 
 3     private Node root;
 4 
 5     class Node{
 6         boolean isWord;
 7         TreeMap<Character,Node> next;
 8         Node(){
 9             this.isWord=false;
10             this.next=new TreeMap<>();
11         }
12     }
13 
14 
15     public Trie() {
16         root=new Node();
17     }
18     
19     public void insert(String word) {
20         Node cur=root;
21         for (int i=0;i<word.length();i++) {
22             char c=word.charAt(i);
23             if (cur.next.get(c)==null) {
24                cur.next.put(c,new Node());
25             }
26             cur=cur.next.get(c);
27         }
28         cur.isWord=true;
29     }
30     
31     public boolean search(String word) {
32         Node cur=root;
33         for (int i=0;i<word.length();i++) {
34             char c=word.charAt(i);
35             if (cur.next.get(c)==null) return false;
36             else cur=cur.next.get(c);
37         }
38         return cur.isWord;
39     }
40     
41     public boolean startsWith(String prefix) {
42         Node cur=root;
43         for (int i=0;i<prefix.length();i++) {
44             char c=prefix.charAt(i);
45             if (cur.next.get(c)==null) return false;
46             else cur=cur.next.get(c);
47         }
48         return cur.next!=null;
49     }
50 }
51 
52 
53 /**
54  * Your Trie object will be instantiated and called as such:
55  * Trie obj = new Trie();
56  * obj.insert(word);
57  * boolean param_2 = obj.search(word);
58  * boolean param_3 = obj.startsWith(prefix);
59  */

思路:可以只开26个数组来实现。也可以根节点加映射实现。

posted on 2022-04-07 18:44  阿ming  阅读(25)  评论(0编辑  收藏  举报

导航