标签:Trie son char int 查找 str 字符串 统计
Trie字符串统计
摘自acwing模板题https://www.acwing.com/problem/content/837/
trie数的存储和查找
形如上面的树,左边的字符串是要存储的字符串,存完一个字符串在他的末尾记录一个标记(方便查找操作)
存储:
存储的时候,一个字符就存放成一个结点,结尾字符打标记.
查找:
查找的时候如果查找到下一个字符不匹配就查找失败
如果查找到,虽然找到了匹配字符但没有标记说明没有存储这个字符串,查找失败
如果查找到最后没有匹配,查找失败
代码
#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 ;
cin >> n;
while(n --)
{
char op[2];
scanf("%s%s",op,str);
if(op[0] == 'I') insert(str);
else printf("%d\n",query(str));
}
return 0;
}
标签:Trie,son,char,int,查找,str,字符串,统计 来源: https://www.cnblogs.com/rdisheng/p/16536326.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。