当前位置:网站首页>Trie思想及模板
Trie思想及模板
2022-08-03 17:14:00 【lcy2023】
参考博文:https://www.acwing.com/solution/content/14695/
课程链接:https://www.acwing.com/video/260/
例题链接:https://www.acwing.com/problem/content/837/
思想
用于高效的存储和查找字符串集合的数据结构,用Trie树的字符串一般要么是小写字母要么都是大写字母,类型不会多,字符串的长度也不会太长
root为空节点,图中五角星的意思是标记有以该字母结尾的字符串,代码表示是cnt数组,记录以该字母结尾的字符串的数量
例题
该题目中都为26个字母,所以可以开辟son[][26]数组,来映射26个字母,该数组表示的是子节点,用son[]某节点的所有子节点,son[]列映射为子节点的值,son[][]的值表示该节点是第几个加入的不重复的节点。cnt[]数组标识字符串的结束,idx用来确定节点是否存在
代码
#include <iostream>
using namespace std;
const int N = 100010;
int son[N][26], cnt[N], idx;
char str[N];
void insert(char *str)
{
int p = 0;
for (int i = 0; str[i]; i ++ )
{
int u = str[i] - 'a';
if (!son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
cnt[p] ++ ;
}
int query(char *str)
{
int p = 0;
for (int i = 0; str[i]; i ++ )
{
int u = str[i] - 'a';
if (!son[p][u]) return 0;
p = son[p][u];
}
return cnt[p];
}
int main()
{
int n;
scanf("%d", &n);
while (n -- )
{
// 此处设置成op[2],而不是char op,是因为char op用scanf("%c")会读入一些空格或回车
// 而char op[2]用scanf("%s")会忽略空格和回车
char op[2];
scanf("%s%s", op, str);
if (*op == 'I') insert(str);
else printf("%d\n", query(str));
}
return 0;
}
边栏推荐
- 兄弟组件通信context
- 茅台日赚1.65亿,经销商日子却越来越难
- #yyds干货盘点# 面试必刷TOP101:两个链表的第一个公共结点
- ThreeJS简介
- ASP.NET Core依赖注入之旅:3.Service Locator和依赖注入
- The strongest distributed lock tool: Redisson
- FinClip | 2022 年 7 月产品大事记
- 华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
- LeetCode·1163.按字典序排在最后的子串·最小表示法
- [redis] cache penetration and cache avalanche and cache breakdown solutions
猜你喜欢

LeetCode·899.有序队列·最小表示法

设置海思芯片MMZ内存、OS内存详解

EasyExcel实现动态列解析和存表

为何微博又双叒叕崩溃了?

After using Stream for many years, does collect still have these "saucy operations"?

JS 字符串转 GBK 编码超精简实现

Description of the functional scenario of "collective storage and general governance" in the data center

EMQX Newsletter 2022-07|EMQX 5.0 正式发布、EMQX Cloud 新增 2 个数据库集成

LeetCode·1163.按字典序排在最后的子串·最小表示法

面试突击:什么是粘包和半包?怎么解决?
随机推荐
大型企业数据治理的现状和解决方案有哪些参考?_光点科技
Async的线程池使用的哪个?
102. 最佳牛围栏
完整的搭建内网穿透ngrok详细教程(有图有真相)
Components of communication - the drop-down menu
383. Ransom Note
SwinIR实战:如何使用SwinIR和预训练模型实现图片的超分
CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
火热的印度工厂,带不动印度制造
node连接mongoose数据库流程
数据万象内容审核 — 共建安全互联网,专项开展“清朗”直播整治行动
ThreeJS简介
PMP备考敏捷考题的五点应对策略
并发高的情况下,试试用ThreadLocalRandom来生成随机数
我想请问下,我们的数据库是在亚马逊,Dataworks 连不通,怎么办?
PMP试题 | 每日一练,快速提分
“68道 Redis+168道 MySQL”精品面试题(带解析),你背废了吗?
如何在 DataWorks 中 写SQL语句监控数据的变化到达一定的值 进行提示
【GAMES101】作业6 加速结构