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

你可能感兴趣的文章
process.env.VUE_APP_BASE_API 获取不到
查看>>
Process.run() 和 Process.start() 之间的区别
查看>>
Processes
查看>>
Processing通过编程实现艺术设计_实现艺术和现实的交互---数据设计分析002
查看>>
ProcessOnLoading
查看>>
SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成
查看>>
PROFINET 模拟器使用教程
查看>>
Program type already present: android.support.v4.widget.EdgeEffectCompat
查看>>
PyTorch中文版官方教程来啦(附下载)
查看>>
Progress Kemp LoadMaster 远程命令执行漏洞复现(CVE-2024-1212)
查看>>
Project configuration is not up-to-date with pom.xml. Run Maven->Update Project
查看>>
Project Euler 15 Lattice paths
查看>>
Project Euler 48 Self powers( 大数求余 )
查看>>
Project Euler Problem 12: Highly divisible triangular number
查看>>
ProjectEuler 2
查看>>
projection介绍及EPSG:4326和EPSG:3857的投射转换
查看>>
project打开文件时,显示无法识别此文件格式?
查看>>
Prometheus + Grafana on Kubernetes部署
查看>>
prometheus + grafana进行服务器资源监控
查看>>
Prometheus Alertmanager 告警配置详解
查看>>