博客
关于我
【leetcode】208. 实现 Trie (前缀树)
阅读量:546 次
发布时间:2019-03-09

本文共 1978 字,大约阅读时间需要 6 分钟。

Trie(发音类似 “try”)是一种树形数据结构,常用于高效存储和检索字符串集合中的键。其主要应用场景包括自动补全和拼写检查。Trie通过分叉树的方式组织数据,使得查找和插入操作效率极高。

Trie Class 实现

class Trie {    private class Node {        private boolean isWord; // 标记是否为单词结尾        private HashMap
next; // 子节点映射 public Node(boolean isWord) { this.isWord = isWord; this.next = new HashMap<>(); } public Node() { this(false); } } private Node root; // 根节点 private int size; // 预留字段,不使用 public Trie() { this.root = new Node(); size = 0; } // 插入单词 public void insert(String word) { Node current = root; for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); if (!current.next.containsKey(c)) { current.next.put(c, new Node()); } current = current.next.get(c); } if (!current.isWord) { current.isWord = true; size++; } } // 检查单词存在 public boolean search(String word) { Node current = root; for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); if (!current.next.containsKey(c)) { return false; } current = current.next.get(c); } return current.isWord; } // 检查是否以某个前缀开头 public boolean startsWith(String prefix) { Node current = root; for (int i = 0; i < prefix.length(); i++) { char c = prefix.charAt(i); if (!current.next.containsKey(c)) { return false; } current = current.next.get(c); } return true; }}

使用示例

Trie trie = new Trie();trie.insert("apple"); // 插入单词bool result = trie.search("apple"); // 检查是否存在单词result = trie.search("app"); // 检查是否存在单词bool startsResult = trie.startsWith("app"); // 检查是否以特定前缀开头

提示

  • 单词和前缀的长度不超过2000个字符
  • insert、search 和 startsWith 调用次数总计不超过 3 × 104 次
  • 单词仅由小写字母组成
  • 提高Trie性能的重要因素是复杂度为 O(m),其中 m 是处理的字符数

转载地址:http://tmhiz.baihongyu.com/

你可能感兴趣的文章
QT教程5:消息框
查看>>
SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
查看>>
pom.xml中提示web.xml is missing and <failonmissingw>...
查看>>
Pomelo开发中Web客户端开发API简介
查看>>
QT教程2:QT5的体系构架
查看>>
PON架构(全光网络)
查看>>
PoolingHttpClientConnectionManager原理剖析
查看>>
QT教程1:ubuntu18.04安装QT5
查看>>
POP-一个点击带有放大还原的动画效果
查看>>
POP3 协议在计算机网络中的优缺点
查看>>
qt批量操作同类型控件
查看>>
Portaudio笔记-WASAPI
查看>>
position:fixed失效情况
查看>>
Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
查看>>
Position属性四个值:static、fixed、absolute和relative的区别和用法
查看>>
POSIX thread编程中关于临界区内条件变量的分析
查看>>
POSIX与程序可移植性
查看>>
posix多线程有感--自旋锁
查看>>
SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
查看>>
POSIX标准和XSI扩展
查看>>