![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前缀树
algsup
这个作者很懒,什么都没留下…
展开
-
[前缀树]leetcode2416:字符串的前缀分数和(hard)
【代码】[前缀树]leetcode2416:字符串的前缀分数和(hard)原创 2022-09-20 13:38:21 · 829 阅读 · 0 评论 -
[前缀树]leetcode745:前缀和后缀搜索(hard)
题目:题解:题解:原创 2022-07-14 08:21:40 · 133 阅读 · 0 评论 -
[前缀树]leetcode1707:与数组中元素的最大异或值(hard)
题目:题解:本题虽为 hard 题,但就是在 [前缀树]leetcode421:数组中两个数的最大异或值(medium) 的基础上加了两个排序,没啥难点,对于queries的排序有点麻烦,不能用 map,因为重复值导致覆盖现场,所以只能用 set。代码如下:class Trie{private: Trie* next[2]={nullptr};public: Trie(){} void insert(int x) // 在前缀树中插入值x {原创 2021-02-24 09:45:29 · 250 阅读 · 0 评论 -
[前缀树]leetcode5237:搜索推荐系统(medium)
题目:5273. 搜索推荐系统题解:题解一:前缀树将前缀树的板子贴过来,然后修修改改就行了。题解二:暴力法先将products排序,然后寻找searchWord的所有前缀,如"m", "mo", "mou", "mous", "mouse",每个前缀寻找products前三个单词就行了,或者不足三个也行。代码如下:class Trie{private: ...原创 2019-11-24 16:44:01 · 212 阅读 · 0 评论 -
leetcode刷题总结之前缀树
前言:由于这段时间在学校上课了,刷题也只有每天晚上刷两道题了,不能像暑假那样刷题一肝到底了。前缀树是上个星期开始刷的,leetcode总共有17个前缀树的题目(其中包括3个收费题,所以我把14个免费题做完了),今天总结下,以后复习用。前缀树的定义:前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。前缀树具体定义...原创 2019-09-21 17:03:16 · 5939 阅读 · 4 评论 -
[前缀树]leetcode208:实现前缀树(medium)
题目:题解:字母树的插入(Insert)、删除( Delete)和查找(Find)都非常简单,用一个一重循环即可,即第i 次循环找到前i 个字母所对应的子树,然后进行相应的操作。实现这棵字母树,我们用最常见的数组保存(静态开辟内存)即可,当然也可以开动态的指针类型(动态开辟内存)。至于结点对儿子的指向,一般有三种方法:1、对每个结点开一个字母集大小的数组,对应的下标是儿子所表示的字母,内...原创 2019-09-06 20:50:59 · 1595 阅读 · 0 评论 -
[前缀树]leetcode211:添加与搜索单词——数据结构设计(medium)
题目:题解:本题是前缀树的一般操作,需要使用dfs来解决遇到.的情况,我们使用dfs递归出在遇到.时,将会遍历root节点的所有children节点的字符串路径,只有有一条字符串路径满足情况就返回true,若都不满足情况就返回false。代码如下:class WordDictionary {private: struct Trie{//建立前缀树 Trie *c...原创 2019-09-09 21:26:18 · 608 阅读 · 0 评论 -
[前缀树]leetcode212:单词搜索 Ⅱ(hard)
题目:题解:前缀树+DFS1)关于前缀树的实现,可参考:这里。2)DFS深度搜索二维数组,设置好递归边界+递归式子,每个点向四周进行DFS,存在于前缀树中的字符标记为’#’,在DFS完成之后还原成以前的字符即可。代码如下:class Trie{private: bool is_string; Trie *next[26]; string str; ...原创 2019-09-14 08:48:40 · 534 阅读 · 3 评论 -
[前缀树]leetcode336:回文对(hard)
题目:题解:第一步:将<单词,下标>存放在hashmap中(使用hashmap代替前缀树),将单词的长度存放在set中。第二步:遍历单词数组,将遍历的到的单词先进行反转:1)第一种情况:单词数组中存在两个长度相等且互为回文的单词。比如:abcd和dcba,当我们遍历到abcd时,将其反转为dcba,然后我们判断dcba是否在map中,并且dcba的下标要和abcd的下标...原创 2019-09-12 21:49:51 · 456 阅读 · 0 评论 -
[前缀树]leetcode421:数组中两个数的最大异或值(medium)
题目:题解:异或的基本原理就是将两个数字分别转成32位二进制后,进行逐位比较,如果同个位置上的数字不同,则该位为1,否则为0。根据这个原理,我们从左高位进行计算,用一个掩码mask来作为底,其中mask当前位i到左高位的所有位置上的数字为1,其它位置为0,即11…10…0。将数组中的每个元素分别与mask进行与运算,将与运算的结果存进前缀树中。i=31: 10000000000000000...原创 2019-09-11 19:42:30 · 439 阅读 · 0 评论 -
[前缀树]leetcode474:连接词(hard)
题目:题解:主要利用前缀树解题,先建树,然后进行搜索操作。这里简单讲解一下搜索单词,例如寻找catsdogcats,当i为2时,我们在前缀树发现cat是一个子单词,然后开始search(sdogcats),然而发现这个并不是子单词,那就证明已cat作为分界词就错了,我们继续遍历单词catsdogcats,然后以cats作为分界词,这样在继续search(dogcats)就可以了。更多细节...原创 2019-09-18 21:11:42 · 317 阅读 · 0 评论 -
[前缀树]leetcode648:单词替换(medium)
题目:题解:本题我们直接使用字符串流来讲句子划分为一个个单词,然后遍历数组,将句子中的每个单词与数组的元素进行比较。对于使用前缀树,我们倒不如直接比较数组中元素第一个字符和单词的第一个字符效率来的快。代码如下:......原创 2019-09-07 11:18:07 · 435 阅读 · 3 评论 -
[前缀树]leetcode667:键值映射(medium)
题目:题解:本题采用前缀树来解题,前缀树节点设有三个成员变量,sumval用来存储字符串前缀的val(前缀就是除去尾字符之前的字符叫前缀)以及相同的key要更新前缀的val,字符串尾字符的val就是记录字符串的val,next[26]表示每个节点值可以取到26个小写字母中的一个。这里我们用一个haspmap来记录遇到相同的key时,原来的val将被替代。代码如下:class MapSum...原创 2019-09-07 09:28:27 · 308 阅读 · 0 评论 -
[前缀树]leetcode676:实现一个魔法字典(medium)
题目:题解:代码如下:原创 2019-09-18 23:33:40 · 360 阅读 · 0 评论 -
[前缀树]leetcode692:前K个高频单词(medium)
题目:题解:使用map代替前缀树,若手动实现前缀树感觉费力不讨好,最后还是要将<string, int>装到vector进行排序,所以直接用map就好啦。代码如下:class Solution {public: //题解:用map代替前缀树 vector<string> topKFrequent_1(vector<string>&...原创 2019-09-19 23:02:35 · 506 阅读 · 1 评论 -
[前缀树]leetcode720:词典中最长的单词(easy)
题目:题解:代码如下:原创 2019-09-19 19:36:33 · 469 阅读 · 1 评论 -
[前缀树]leetcode745:前缀和后缀搜索(hard)
题目:题解:代码如下:原创 2019-09-20 23:17:12 · 738 阅读 · 0 评论 -
[前缀树]leetcode1023:驼峰式匹配(medium)
题目:题解:本题虽然在前缀树的tag中,但是感觉和前缀树也没啥关系啊!如果各位有用前缀树做出来的,告诉我下,谢谢。算法:遍历查询项的每个单词,然后与模式串中的字符匹配,分为三种情况:1)查询项的大写字符与模式串的大写字符匹配,两个字符串继续向后匹配2)查询项的大写字符与模式串的大写字符部匹配,表示查询项与模式串匹配不成功(因为查询串不能除了模式串的大写字符)3)其他情况,模式串...原创 2019-09-21 15:54:06 · 326 阅读 · 0 评论 -
[前缀树]leetcode1032:字符流(hard)
题目:题解:起初使用前缀树导致内存爆了,后改用后缀树顺利通过,不过就是时间有点吃不消了。(后缀树就是每个字符串反向后建立的前缀树,本质还是前缀树。)解题思路:1)从words中提取word,将word反向,建立后缀树。2)在查询的时候,我们将每个字符保存在一个字符串中,每次每个字符都插入到该字符串的首部。然后我们直接在后缀树中查找该字符串的最短前缀能否表示成一个字符串就行了。代码...原创 2019-09-21 11:21:50 · 428 阅读 · 0 评论