首页 > 试题广场 >

字典树的实现

[编程题]字典树的实现
  • 热度指数:10352 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。

假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。

1. void insert(String word):添加word,可重复添加;
2. void delete(String word):删除word,如果word添加过多次,仅删除一次;
3. boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);
4. int prefixNumber(String pre):返回以字符串pre作为前缀的单词数量。

现在给定一个m,表示有m次操作,每次操作都为以上四种操作之一。每次操作会给定一个整数op和一个字符串word,op代表一个操作码,如果op为1,则代表添加word,op为2则代表删除word,op为3则代表查询word是否在字典树中,op为4代表返回以word为前缀的单词数量(数据保证不会删除不存在的word)。

对于每次操作,如果op为3时,如果word在字典树中,请输出“YES”,否则输出“NO”;如果op为4时,请输出返回以word为前缀的单词数量,其它情况不输出。
数据范围:操作数满足 ,字符串长度都满足
进阶:所有操作的时间复杂度都满足 
示例1

输入

[["1","qwer"],["1","qwe"],["3","qwer"],["4","q"],["2","qwer"],["3","qwer"],["4","q"]]

输出

["YES","2","NO","1"]

备注:

头像 xqxls
发表于 2021-07-24 14:13:50
题意整理 构造一个数据结构,用来处理字符串。 这个数据结构可以插入、删除、查询字符串。 查询分两种,一种是查询字符串是否出现过,另一种是查询前缀单词出现次数。 方法一(TrieNode实现) 1.解题思路 首先构建一个TrieNode结构,包括一个TrieNode类型的child数组,用于记录所 展开全文
头像 ruiruisun
发表于 2020-11-24 11:20:36
1. 稍微复杂一点的是求前缀串的数量,这里用dfs计算以当前节点为跟的字典树中包含的所有‘#’的数量,即完整的字符串个数2. 还需要思考的就是删除字符串,这里查找以字符串结尾的字典删掉即可3. 这道题比LeetCode[208. 实现 Trie (前缀树)]难很多,大家可以自行练习秒掉它 class 展开全文
头像 xchen.fighter
发表于 2021-07-05 00:33:49
struct TrieNode { int cnt; bool end; TrieNode* next[26] = {nullptr}; TrieNode() { cnt = 1; end = false; for (i 展开全文
头像 牛客838268276号
发表于 2020-12-09 16:41:00
哈希表做法 #include <unordered_map> class Solution { public: /** * * @param operators string字符串vector<vector<>> the ops 展开全文
头像 空中转体一周半
发表于 2022-03-14 10:58:45
思路:题目要求出现的字母均为小写,那么可以创建一个PreTriee的类,其属性成员包括node:单词的下一个字母,isWorld:表示该前缀是否为单词,worldCount:表示该单词插入的数量,prefixCount:表示该前缀插入了多少次。要进行对字段树的插入删除以及查询操作,大体上代码和插入类 展开全文
头像 雪号鸟
发表于 2024-03-21 10:40:24
#include <string> #include <vector> class Trie { private: const static int MaxN = 1500001;//如果数据变多,就改大这个值 int tree[MaxN][26] = { { 展开全文
头像 有名
发表于 2021-08-02 17:08:43
描述 字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String word):删除word,如 展开全文
头像 泪无声呢
发表于 2021-08-02 17:57:07
字典树的实现 问题描述:字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。void insert(String word):添加word,可重复添加;void delete(String wor 展开全文
头像 宫水三叶的刷题日记
发表于 2021-08-25 17:55:37
Trie 树 树(又叫「前缀树」或「字典树」)是一种用于快速查询「某个字符串/字符前缀」是否存在的数据结构。 其核心是使用「边」来代表有无字符,使用「点」来记录是否为「单词结尾」以及「其后续字符串的字符是什么」。 数组实现 Trie 一个朴素的想法是直接使用「二维数组」来实现 树。 由于题目要 展开全文
头像 小菲柱
发表于 2022-09-10 14:47:15
写到自闭。 class Solution { public: /** * * @param operators string字符串vector<vector<>> the ops * @return string字符串vector 展开全文