【Tire树】高效统计字符串
导读 ^ _ ^
Tire树是很关键的一种数据结构,你应该听过他的另外一个名字,即字典树,可以高效存储和查找字符串集合。
何为Tire树
一种高效存储和查找字符串集合的数据结构
结尾进行标记,统计出现次数
字符串统计
表示方式
son数组
- 第一维度用了表示节点,由idx控制
- 第二维度用来表示当前子节点枝条,有26个字母构成
cnt数组
- 用来统计当前节点出现的次数
关系映射
- 将字符 - ‘a’映射成数字
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int son[N][26], cnt[N], idx;//注意0是根节点,又是空节点
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]++;//最终儿子结尾+1
}
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--) {
char op[2];//过掉一个换行
scanf("%s%s",op,str);
if(op[0] == 'I')insert(str);
else printf("%d\n",query(str));
}
return 0;
}
#谢谢你的观看!
^ _ ^
本文作者:HX-Note
本文链接:https://www.cnblogs.com/HX-Note/p/17154855.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步