(基础)--- Trie树

什么是Trie树

trie,又称前缀树或字典樹,是一种有序树,用于保存关联数组,其中的键通常是字符串。 与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。 一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。

Trie字符串统计

#include<iostream>

using namespace std;

const int N = 1e5+10;

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] ++ ; 
}

int query(char str[]){
	int p = 0;
	for(int i = 0; str[i]; i ++ ){
		int u = str[i];
		if(!son[p][u]) return 0;
		p = son[p][u];
	}
	return cnt[p];
} 

int main(){
	int n;
	cin>>n;
	while(n -- ){
		char op[2];
		cin>>op>>str;
		if(op[0] == 'I') insert(str);
		else printf("%d\n",query(str));
	}
	return 0;
}
posted @ 2020-08-23 20:42  chstor  阅读(148)  评论(0编辑  收藏  举报