Trie树

一个高效的存储和查找字符串集合的数据结构,全是大写或者全是小写或者只有0和1

1、思路

用树的结构来存储字符串


2、代码模板


#include<iostream>
using namespace std;
const int N=1e5+10;
int son[N][26],cnt[N],idx;			//每个节点最多有26个边,cnt是以这个点结尾的字符串个数,idx是当前用到的下标
									//下标是0的点,既是根节点,又是空节点 
char str[N]; 
void insert(char str[])
{
	int p=0;						//当前走到了哪里 
	for(int i=0;str[i];i++)			//字符串结尾是\0可以用来判断 
	{
		int u=str[i]-'a';			//a~z映射为0~25 
		if(!son[p][u])
			son[p][u]=++idx;
		p=son[p][u];				//当前走到了son[p][u] 
	}	
	cnt[p]++;						//以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;
} 



全部评论

相关推荐

09-19 19:43
已编辑
广东工业大学 golang
zizi哦:很牛了,稳大厂给几点建议:一、想被稳的问题,关键点,可以加深一点,一眼看过去全是文字,没事干容易抓不住重点;二、第一个开源项目很多人 star,这是一个证明你牛逼的证据,建议放在项目背景,开头就是这句话,背景到结果,并且重点标注;三、个人技能可以放后,没什么把握的可以不写上去,比如你列了这么多微服务中间件,你确定自己真的理解底层吗?如果不熟悉,可以表述为熟悉微服务体系开发,如 xxx 中间件;四、项目很多描述在讲述架构,有没有自己觉得亮点的设计,体现不出你解决问题的过程和思考。
如何写一份好简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务