首页 > 其他分享 >trie树

trie树

时间:2023-11-28 16:33:37浏览次数:22  
标签:trie ++ son char int str 节点

用于字符串的插入和查询

1.acwing835

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 100010;
 5 int son[N][26]; //trie树中每个点的所有儿子
 6 int cnt[N],idx; // 以当前这个点为结尾的单词有多少个;表示当前用到了哪个下标,idx = 0即是根节点又是空节点
 7 char str[N];
 8 
 9 void insert(char str[]) //插入即存储
10 {
11     int p = 0; //从根节点开始
12     for (int i = 0; str[i]; i ++ ) //遍历字符串的每一个字母
13     {
14         int u = str[i] - 'a'; //把字母映射成0~25的数字
15         if(!son[p][u]) son[p][u] = ++ idx; //如果p这个节点不存在u这个儿子的话,那么把他创建出来
16         p = son[p][u]; //走到下一个节点去
17     }
18     
19     cnt[p] ++; //以当前字母结尾的单词数量 + 1
20     
21 }
22 
23 int query(char str[]) //查询当前字符串出现了多少次
24 {
25     int p = 0;
26     for (int i = 0; str[i]; i ++ )
27     {
28         int u = str[i] - 'a'; //得到当前子节点对应的数字编号
29         if(!son[p][u]) return 0; //如果不存在这个点直接为0,否则的话走过去
30         p = son[p][u];
31     }
32     
33     return cnt[p]; //返回以p结尾的单词的数量
34 }
35 
36 int main()
37 {
38     int n;
39     scanf("%d", &n);
40     while (n -- ){
41         char op[2]; //两种操作类型
42         scanf("%s%s", op, str); //读入操作类型和字符串
43         
44        if(*op == 'I')  insert(str);
45        else printf("%d\n",query(str));
46     }
47     return 0;
48 }
View Code

 

标签:trie,++,son,char,int,str,节点
From: https://www.cnblogs.com/rw666/p/17862276.html

相关文章

  • 【11月LeetCode组队打卡】Task2--TrieTree
    字典树Trie音同try,又称前缀树,是一颗有根树,根节点到树节点的一个路径就代表一个单词,多用于关键词检索,自动补完和拼写检查用空间换时间:借公共前缀来降低查询时间的开销根节点无内容(参考:字典树TrieTree图文详解——CSDN实现Trie题解——力扣)208.实现Trie复习一下this......
  • 【论文阅读笔记】【Image Retrieval】 Global Features are All You Need for Image R
    SuperGlobalICCV2023读论文思考的问题论文试图解决什么问题?图片检索方法通常由粗粒度图片检索和精确的结果重排列两个模块组成。人们通常认为图片的localfeature在结果重排列中是不可或缺的,但对大量的localfeature的计算需要较高的计算资源和时间能否只用图片......
  • Object.entries()
    Object.entries()方法返回一个给定对象自己的字符串键值对的数组。constobj={a:"aa",b:"bb",c:"cc"};console.log(Object.entries(obj),"Object.entries(obj)Object.entries(obj)");打印显示是这样[["a",......
  • Trie 树
    Trie树是一颗像字典一样的树。在Trie树上用边来表示字母,一个节点到另一个节点的边就是一个字母。实现:点击查看代码voidinsert(chars[]){ intu=0,len=strlen(s); for(inti=0;i<len;i++){ intv=gt(s[i]); if(!son[u][v])son[u][v]=++cn......
  • 【LC周赛-371】 D. Trie树求最大异或对
    【LC周赛-371】D.Trie树求最大异或对题意给一个数组,求两个数满足|x-y|<=min(x,y)的异或最大值。题解从|x-y|<=min(x,y)知道,每个y可以考虑的x范围是y/2<=x<y;然后Trie树实现更优复杂度内,从窗口获得最大异或值思路就是高位依次取值,具体看代码吧代码constint......
  • 解决MySQL8报错:Public Key Retrieval is not allowed
    问题分析:这个是由于配置的URL中的useSSL为false导致的,当其为false后,mysql将会检查allowPublicKeyRetrieval是不是TRUE,由于开启allowPublicKeyRetrieval不安全可能遭到中间人攻击(英语:Man-in-the-middleattack,缩写:MITM),所以allowPublicKeyRetrieval的值默认为false。两项都为false后......
  • trie(字典树)学习笔记
    trie(字典树)学习笔记trie可以在\(O(nL)\)的时间,\(O(n\left|\Sigma\right|L)\)的空间完成插入,查找字符串。其中\(L\)为字符串长,\(\Sigma\)为字符集inttrie[N][26],tot;inttag[N];voidinsert(){intn=str.size();intu=0;for(inti=0;i<n......
  • 字典树【Trie】
    字典树【Trie】一种能够快速插入和查询字符串的多叉树结构节点的编号各不相同,根节点编号为0,其它节点用来标识路径,还可以标记单词插入的次数。边标识字符Tier维护字符串的集合,支持2种操作:向集合中拆入一个字符串,voidinsert(charc)向集合中查询一个字符串,intquery(charc)......
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key
    问题:连接MySQL数据库时抛出异常信息:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:PublicKeyRetrievalisnotallowed一开始aplication.yml配置如下所示:spring:application:name:service-provider-sentinel9999datasource:driver-cl......
  • EF出现错误:An error occurred while updating the entries. See the inner exception
    问题:EF出现错误Anerroroccurredwhileupdatingtheentries.Seetheinnerexceptionfordetails场景:适用Excel批量导入数据时,提示了以上错误解决思路:1、查看是否有重复的主键2、是否有不可为空的字段没有赋值3、字段内容是否超出长度限制......