博客
关于我
【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/

你可能感兴趣的文章
python glob的安装和使用
查看>>
Python google drive API 下载,文件在哪里?
查看>>
Python GPS 模块:读取最新的 GPS 数据
查看>>
python grpc入门
查看>>
python gRPC测试helloworld
查看>>
python list,str的拼接与转换
查看>>
python matplotlib简单使用
查看>>
python os.system
查看>>
Python os.system执行多条语句,os.system的返回值以及与os.popen的区别
查看>>
Python os和sys模块
查看>>
python os文件/目录
查看>>
Python Package 之 Faker(随机姓名、电话)
查看>>
python pandas TimeStamps到夏令时的本地时间字符串
查看>>
Python Pandas 用顶行替换标题
查看>>
Python Pandas-从DataFrame按类别绘制多个条形图
查看>>
Python PyQt5 将不再显示此消息复选框添加到 QMessageBox
查看>>
Python PyQt5:如何使用 PyQt5 显示错误消息
查看>>
Python pytest 面试题!
查看>>
Python pytz 时区函数返回一个相差 9 分钟的时区
查看>>
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
查看>>