当前位置: 首页 > news >正文

实现Trie(前缀和)C++

Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。

请你实现 Trie 类:

Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
在这里插入图片描述

前缀树
Trie是一颗非典型的多叉树模型,采用字母映射表保存了对当前结点而言下一个可能出现的所有字符的链接
前缀树示例:
在这里插入图片描述

插入
从根结点的子结点开始与word第一个字符进行匹配,一直匹配到前缀链上没有对应的字符,这时开始开辟新的结点,直到插入完word的最后一个字符,同时还要将最后一个结点设置为end=true,表示这是一个终止节点;

搜索
search和startWith都是同一个操作,从根节点向下匹配,两者的区别只是end=true?

struct Node{Node* son[26];     // 字母映射表bool end = false;  // 终止节点标志
};
class Trie {Node* root = new Node();   // 初始化根节点// 搜索int find(string word){Node* cur = root;for(char c: word){c-='a';if(cur->son[c]==nullptr)   // 父节点的后一个字母不为creturn 0;    // 返回0表示搜索失败cur=cur->son[c];}// 若为终止节点,则返回2表示完全匹配,否则返回1,表示部分匹配return cur->end? 2:1;}public:Trie() {}void insert(string word) {Node* cur = root;for(char c:word){c-='a';if(cur->son[c] == nullptr){    // 父节点的后一个字母不为ccur->son[c] = new Node();  // new一个新的节点出来}cur = cur->son[c];}cur->end = true;    // 终止标志}bool search(string word) {return find(word)==2;   // 完全匹配}bool startsWith(string prefix) {return find(prefix)!=0;    // 只要不是匹配失败就行}
};/*** Your Trie object will be instantiated and called as such:* Trie* obj = new Trie();* obj->insert(word);* bool param_2 = obj->search(word);* bool param_3 = obj->startsWith(prefix);*/
http://www.dtcms.com/a/314045.html

相关文章:

  • 【REACT18.x】封装react-rouer实现多级路由嵌套,封装登录态权限拦截
  • PyTorch :三角函数与特殊运算
  • python:讲懂决策树,为理解随机森林算法做准备,以示例带学习,通俗易懂,容易理解和掌握
  • 张 事实关注增强模型:提升AI准确率新方法
  • 设备电机状态监测中的故障诊断与定位策略
  • 【AI论文】VL-Cogito:面向高级多模态推理的渐进式课程强化学习
  • Redis之Hash和List类型常用命令
  • [特殊字符] Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • 小鹏汽车前端面经
  • 笔记本电脑联想T14重启后无法识别外置红米屏幕
  • 【银河麒麟服务器系统】自定义ISO镜像更新内核版本
  • Axure日期日历高保真动态交互原型
  • Axure设计Web端新增表单页面模板案例
  • 蚂蚁S9矿板引脚定义
  • 基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用
  • 3Ds Max 2019 安装配置教程(精简版适配 | 含中文设置与常见问题)
  • HIL技术:轻松开展整车热管理控制器功能验证
  • PSOFT Pencil+ 4.25 插件安装教程(适用于 3ds Max 2022-2025)
  • CVPR论文解析:告别Janus问题,text-to-3D更一致!
  • ⭐CVPR2025 AKiRa:让视频生成玩转相机光学的黑科技[特殊字符]
  • 9.感知机、神经网络
  • (论文速读)Text-IF:基于语义文本引导的退化感知交互式图像融合方法
  • 深度学习-ResNet50V2训练
  • 【Axure高保真原型】中继器表格——自适应高度
  • JVM(Java虚拟机)运行时数据区
  • 2025年信创政策解读:如何应对国产化替代挑战?(附禅道/飞书多维表格/华为云DevCloud实战指南)
  • 正点原子阿波罗STM32F429IGT6移植zephyr rtos(四)---在独立的应用工程里使用MPU6050
  • Visual Studio Code的下载,安装
  • 复合机器人抓取精度怎么测量?
  • STM32F103C8T6 BC20模块NBIOT GPS北斗模块采集温湿度和经纬度发送到EMQX