栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Trie字符串统计(计算字符串在集合中出现次数)(01trie)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Trie字符串统计(计算字符串在集合中出现次数)(01trie)

01trie我们可以把一个字符串放在一个树上
tr[N][27] 其中N表示父亲节点,[27]表其映射的子节点,例子建树如下

之后知道这样建树之后就比较好理解了

#include
#define ll long long
using namespace std;
const int maxn = 2e4 + 100;
const int N = 1e5 + 5;
int tr[maxn][30];
char str[N];
int idx,cnt[maxn],n;
void insert(char s[], int len){
	int p = 0;
	for(int i = 0; i < len; i++){
		int now = s[i] - 'a' + 1;
		if(!tr[p][now]){
			tr[p][now] = ++ idx;
		}
		p = tr[p][now];
	}
	cnt[p]++;
}
int query(char s[], int len){
	int p = 0;
	for(int i = 0; i < len; i++){
		int now = s[i] - 'a' + 1;
		if(!tr[p][now])return 0;
		p = tr[p][now];
	}
	return cnt[p];
}
int main(){
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++){
		char op;
		cin >> op >> str;
		int len = strlen(str);
		if(op == 'I'){
			insert(str, len);
		}else{
			cout << query(str, len) << endl;
		}
	}
} 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号