力扣211. 添加与搜索单词 - 数据结构设计

字典树

  • 思路:
    • 设计一棵字典树,每个节点存放单词的一个字符,节点放一个标记位,如果是单词结束则标记;
    • 字典树插入:
      • 字典树默认有 26 个 slot 槽代表 a - z;
      • 遍历单词,如果字符对应槽存在则迭代到子节点,如果不存在则创建;
      • 在单词结尾的节点,将 flag 标记;
    • 字典树查询:
      • 定义 dfs(word, index, trie) 函数,表示 word 的第 index 字符是否在 trie 树上;
      • 递归查询,终止条件为 index 为 word 长度,并且 flag 标记被设置;
      • 需要注意通配符 '.',代表任意字母:
        • } else if (c == '.') {

        •     for (int i = 0; i < 26; i++) {

        •         TrieNode* child = node->child[i];

        •         if (child != nullptr && dfs(word, index + 1, child)) {

        •             return true;

        •         }

        •     }

        • }

  • 完整代码:
struct TrieNode {std::vector<TrieNode*> child;bool isEnd;TrieNode() :child(std::vector<TrieNode*>(26, nullptr)) ,isEnd(false) {}};void insert(TrieNode* root, const std::string& word) {TrieNode* node = root;for (auto c : word) {if (node->child[c - 'a'] == nullptr) {node->child[c - 'a'] = new TrieNode();}node = node->child[c - 'a'];}node->isEnd = true;
}class WordDictionary {
public:WordDictionary() {tire = new TrieNode();}void addWord(string word) {insert(tire, word);}bool search(string word) {return dfs(word, 0, tire);}private:bool dfs(const std::string& word, int index, TrieNode* node) {if (index == word.size()) {return node->isEnd;}char c = word[index];if (c >= 'a' && c <= 'z') {TrieNode* child = node->child[c - 'a'];if (child != nullptr && dfs(word, index + 1, child)) {return true;}} else if (c == '.') {for (int i = 0; i < 26; i++) {TrieNode* child = node->child[i];if (child != nullptr && dfs(word, index + 1, child)) {return true;}}}return false;}private:TrieNode* tire;
};/*** Your WordDictionary object will be instantiated and called as such:* WordDictionary* obj = new WordDictionary();* obj->addWord(word);* bool param_2 = obj->search(word);*/
  • 后续将会对 zmq 中字典树的应用进行分析,敬请期待 ...

————————————————————————————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哥德巴赫猜想不成立

哥德巴赫猜想是德国人哥德巴赫与瑞士人欧拉联手提出的素数与合数关系猜想&#xff1a;≥2的偶数素数素数。后来黎曼崛起&#xff0c;他把1剔除出素数队列&#xff0c;哥猜被整理为&#xff1a;≥6的偶数素数素数&#xff0c;≥9的奇数素数素数素数。 哥猜虽然是欧洲人的课题&am…

Python自动化实战之接口请求的实现

在前文说过&#xff0c;如果想要更好的做接口测试&#xff0c;我们要利用自己的代码基础与代码优势&#xff0c;所以该章节不会再介绍商业化的、通用的接口测试工具&#xff0c;重点介绍如何通过 python 编码来实现我们的接口测试以及通过 Pycharm 的实际应用编写一个简单接口测…

Redis应用(三)实现自动补全

自动补全往往给出部分提示供用户选择&#xff0c;这就涉及排序。有几下几种方法&#xff1a; 一、需要添加元素且数据量少 1、方案&#xff1a;数据量非常小时&#xff0c;程序从redis中获取数据后&#xff0c;在程序中排序。 &#xff08;1&#xff09;写数据&#xff1a;如…

『Open3D』1.10 Tensor数据处理

open3d中实现了自身的数据类型,用于open3d中内部算法的数值计算,但基础使用上与numpy类似。 目录 1、tensor创建 2、tensor数据属性 3、 Tensor数据在CPU与GPU上的转换

Linux/Traceback

Enumeration nmap 使用nmap初步扫描发现只开放了22和80端口&#xff0c;端口详细扫描情况如下 先看看web是什么样子的&#xff0c;打开网站发现有一条留言&#xff0c;显示该站点已经被黑了&#xff0c; 并且留下了后门 查看源代码&#xff0c;可以看到下面的注释 <!--So…

Docker中创建并配置MySQL、nginx、redis等容器

Docker中安装并配置MySQL、nginx、redis等 文章目录 Docker中安装并配置MySQL、nginx、redis等一、创建nginx容器①&#xff1a;拉取镜像②&#xff1a;运行nginx镜像③&#xff1a;从nginx容器中映射nginx配置文件到本地④&#xff1a;重启nginx并重新配置nginx的挂载 二、创建…

python编写的端口扫描脚本

实训项目制作的端口扫描脚本 附有详细的使用命令解释 可以实现单个端口进行扫描和端进行扫描 eg&#xff1a;1-65535 import optparse # 导入用于解析命令行参数的模块 import socket # 导入用于网络通信的模块 # 定义函数&#xff1a;扫描指定主机的指定端口 def PortSca…

Vue透传 Attributes的代码以及总结

//透传简单来说就是在子组件写style,class或者函数可以将它们&#xff0c;自动直接传递给 template&#xff1a;里面的单个节点。 //多个节点透传的自动传递会生效&#xff0c;如果在节点中像使用&#xff0c;那么就需要在对应的节点中写像:style"$attrs.style"的形…

LabVIEW精确测量产品中按键力和行程

项目背景 传统的按键测试方法涉及手工操作&#xff0c;导致不一致和效率低下。在汽车行业中&#xff0c;带有实体按键的控制面板非常常见&#xff0c;确保一致的按键质量至关重要。制造商经常在这些组件的大规模、准确测试中遇到困难。显然&#xff0c;需要一个更自动化、精确…

Kubernetes (十四) 调度策略

一. 调度策略 二. 调度方法 nodeName 创建pod配置文件 vim nodename.yaml apiVersion: v1 kind: Pod metadata: name: nginx labels…

23 SEMC外扩SDRAM

文章目录 23.1 SDRAM 控制原理23.2 SEMC 简介 23.1 SDRAM 控制原理 RT1052 系列芯片扩展内存时可以选择 SRAM 和 SDRAM 由于 SDRAM 的“容量/价格”比较高&#xff0c;即使用 SDRAM 要比 SRAM 要划算得多。 给 RT1052 芯片扩展内存与给 PC 扩展内存的原理是一样的 PC 上一般…

【计算机网络】HTTP协议以及简单的HTTP服务器实现

文章目录 一、HTTP协议1.认识URL2.urlencode和urldecode3.HTTP协议格式4.HTTP的方法5.HTTP的状态码6.HTTP常见Header7.重定向8.长连接9.会话保持10.基本工具 二、简单的HTTP服务器实现1.err.hpp2.log.hpp3.procotol.hpp4.Sock.hpp5.Util.hpp6.httpServer.hpp7.httpServer.cc8.总…

网络编辑day4

思维导图 广播模型发送端-->类似于UDP客户端 #include<head.h> int main(int argc, const char *argv[]) {//1、创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error ");return -1;}//2、将套接字设置成允许广播int broadcast1…

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二(正式赛)

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二 模块二竞赛项目试题 根据信息安全管理与评估技术文件要求&#xff0c;模块二为网络安全事件响应、数字取证调查和 应用程序安全。本文件为信息安全管理与评估项目竞赛-模块二试题。 介绍 竞赛有固定的开始和结…

0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC

0.96寸OLED-单独驱动和U8g2驱动-硬件软件IIC 博主平时DIY经常使用OLED&#xff0c;其中以4脚的I2C屏最多&#xff0c;就想着总结一下子&#xff0c;让广大DIY朋友更容易找到资源。 驱动采用的时SSD1306 同学们拿到代码后&#xff0c;可以直接用&#xff0c;其中博主给的代码默认…

Windows 常用快捷键

文章目录 前言Win R&#xff1a;打开运行窗口Win D&#xff1a;显示桌面。Win E&#xff1a;打开资源管理器。Ctrl Shift Esc&#xff1a;打开任务管理器。Alt Tab&#xff1a;切换当前打开的窗口。F2&#xff1a;重命名选定的文件或文件夹。Ctrl W&#xff1a;关闭当前…

学习响应式编程中遇到的奇奇怪怪的问题

spring项目无法启动 Description: Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context. Action: Check your application’s dependencies for a supported react…

【GitHub项目推荐--AI杀入斗地主领域】【转载】

AlphaGo&#xff1a;第一个战胜围棋世界冠军的人工智能机器人。 我不会玩围棋&#xff0c;没办法和 AlphaGO 对局。但是我喜欢玩斗地主&#xff0c;有斗地主人工智能机器人吗&#xff1f; 有&#xff0c;而且还开源了。DouZero&#xff1a;快手团队开发的斗地主AI。别的不说&…

文件共享服务(一)——DAS、NAS、SAN存储类型

一、存储类型 存储类型主要有三种 1. DAS直连式存储 通常由数据线直连电脑就可以用&#xff0c;比如一块新硬盘&#xff0c;只需要利用磁盘模拟器分区&#xff0c;创建文件系统&#xff0c;挂载就可以使用了。 PC中的硬盘或只有一个外部SCSI接口的JBOD存储设备&#xff08;即…

编程框架概述:MVC, MVP, MVVM, Flux/Redux, 和 Clean Architecture

前言 在软件开发中&#xff0c;选择合适的编程框架和架构模式对于构建可维护和可扩展的应用程序至关重要。初学者在面对多种架构选项时可能会感到困惑。本文将详细介绍五种流行的编程框架&#xff1a;MVC、MVP、MVVM、Flux/Redux和Clean Architecture。 MVC&#xff08;Model-V…