208. 实现 Trie (前缀树)
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个数组来实现。也可以根节点加映射实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。