今天在leetcode上面看了一道题(第208题),问题是如何实现一个字符串前缀树,能够实现字符串的插入,查找和查找前缀功能。在这里记录一下前缀树的实现:

class Trie {
public:/** Initialize your data structure here. */Trie() {isEnd = false;for (int i = 0; i < 26; i++){this->children[i] = NULL;}}/** Inserts a word into the trie. */void insert(string word) {Trie *p = this;for (int i = 0; i < word.size(); i++){if (p->children[word[i] - 'a'] == NULL){//如果这个是空的p->children[word[i] - 'a'] = new Trie();}p = p->children[word[i] - 'a'];}p->isEnd = true;//最后一个设置为尾结点。//注意上面,只要这个节点当过字符串的最后一个节点,他就会被置为isEnd=true。搜索的时候因为并不强调这个字符串是第几个,所以这么做没有问题}/** Returns if the word is in the trie. */bool search(string word) {Trie *p = this;for (int i = 0; i < word.size(); i++){if (p->children[word[i] - 'a'] == NULL) return false;p = p->children[word[i] - 'a'];}return p->isEnd; //注意这里必须看是不是尾结点,因为是精确匹配,不是前缀,这个和找前缀不一样}/** Returns if there is any word in the trie that starts with the given prefix. */bool startsWith(string prefix) {Trie *p = this;for (int i = 0; i < prefix.size(); i++){if (p->children[prefix[i] - 'a'] == NULL) return false;p = p->children[prefix[i] - 'a'];}return true;}public:Trie *children[26];//前缀树只由26个小写字母a-z组成。所以只划分了26个子节点bool isEnd;//true表示这个节点是某一个字符串的结束节点
};

C++简单实现 前缀树相关推荐

  1. 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题

    第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先计算必须以i结尾的子数组的异或和,然后再计算机i+1的,以此类推... ...

  2. 数据库索引数据结构总结——ART树就是前缀树

    数据库索引数据结构总结 from:https://zhewuzhou.github.io/2018/10/18/Database-Indexes/ 摘要 数据库索引是数据库中最重要的组成部分,而索引的 ...

  3. AC解 - Phone List(HDOJ#1671) 前缀树的一个应用

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Time Limit: 3000/1000 MS (Java/Others)    Memory L ...

  4. Seq2Seq+前缀树:检索任务新范式(以KgCLUE为例)

    ©PaperWeekly 原创 · 作者 |苏剑林 单位 |追一科技 研究方向 |NLP.神经网络 两年前,在<万能的seq2seq:基于seq2seq的阅读理解问答>和<" ...

  5. trie树查找前缀串_Trie数据结构(前缀树)

    trie树查找前缀串 by Julia Geist Julia·盖斯特(Julia Geist) A Trie, (also known as a prefix tree) is a special ...

  6. 前缀树(字典树,单词查找树,Trie树)

    参考网址:https://blog.csdn.net/u013949069/article/details/78056102?utm_source=copy 概述 前缀树又名字典树,单词查找树,Tri ...

  7. Leetcode 208:实现Trie(前缀树)

    问题描述: 思路简述: 借用一张图 前缀树又叫做单词查找树,是一种树形数据结构,可以用于存储大量的字符串,优点是可以利用不同字符串的公共前缀来节省大量的存储空间,避免了顺序存储字符串列表的冗余,可以看 ...

  8. java实现前缀树--过滤敏感词汇

    一.前缀树简单介绍 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...

  9. 前缀树是什么 前缀树的使用场景

    前缀树的概述 前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构. 典型应用是用于统计和排序大量的字符串(但不仅限于字符 ...

最新文章

  1. Redis进阶实践之三如何在Windows系统上安装安装Redis
  2. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
  3. JNI中C调用Java方法
  4. 网站优化中搜索引擎为何重视原创内容呢?
  5. 刷leetcode第705题- 设计哈希集合
  6. 光纤转CAN总线在消防报警主机联网中的应用
  7. 虚拟主机中,不修改IIS设置,在IIS6下运行MVC架构的网站
  8. CNN经典模型:VGGNet
  9. macos支持exfat吗_在Windows上使用VMware Workstation虚拟机安装macOS
  10. CSS权威指南(1)
  11. 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习
  12. mongoDB 使用 mongoVue
  13. Android 视频录制工具类VideoRecordUtil
  14. C++输出流cout的执行顺序问题
  15. 【BH区块链项目热点问答】加拿大石油公司利用废弃天然气为挖掘BTC提供动力。你怎么看?...
  16. 无线网络中的单跳和多跳
  17. 【JVM】<Java虚拟机>JVM架构各种**虚拟机
  18. Python数据分析笔记:聚类算法之K均值
  19. 【图像去噪】中值滤波和均值滤波matlab源码
  20. MySQL:数据库压力测试报告

热门文章

  1. python没基础能自学吗-需要自学python吗?大概多久能学会?
  2. python工资这么高为什么不学-为什么学Python的人越来越多?
  3. python爬虫-Python 爬虫介绍
  4. 用python画多来a梦-使用Python的Turtle绘制哆啦A梦实例
  5. python能自学成功吗-自学入门Python能学会吗?
  6. python是什么 自学-怎么自学python,大概要多久?
  7. 一种基于语音识别的机器人语义识别系统的制作方法
  8. java progressbar swt_SWT(JFace)体验之ProgressBar
  9. Vue3学习之第二节:ref函数、reactive函数
  10. linux 命令美丽,美丽的程序猿-Linux下那些查找文件的小技巧-find