trie树

输入

输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。

在20%的数据中n, m<=10,词典的字母表大小<=2.

在60%的数据中n, m<=1000,词典的字母表大小<=5.

在100%的数据中n, m<=100000,词典的字母表大小<=26.


输出

对于小Hi的每一个询问,输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。

样例输入
5
babaab
babbbaaaa
abba
aaaaabaa
babaababb
5
babb
baabaaa
bab
bb
bbabbaab
样例输出
1
0
3
0
0
 

#include<iostream>
#include<cstdio>
#include<cstring>
 
using namespace std;
 
int trie[1000010][26] = {0}; //trie[i][j]=k,表示i号节点与k号节点相连,边为j号字符; k=0表示没有边相连
int color[1000010] = {0}; //color[i]=1 表示i号节点是终止节点(本题未用到)
int cnt[1000010] = {0}; //cnt[i] 表示i号节点为根节点的子树中有多少个终节点,即可知以它为前缀的字符串有多少个(本题要求)
int k = 1;
 
void insert(char *a)
{
	int s = 0;
	int len = strlen(a);
	for(int i=0;i<len;i++)
	{
		int c = a[i]-'a';
		if(trie[s][c]==0)
		{
			trie[s][c] = k;
			k++;
		}
		s = trie[s][c];
		cnt[s]++;
	}
	//color[s] = 1;
}
 
int search(char *a)
{
	int s = 0;
	int len = strlen(a);
	for(int i=0;i<len;i++)
	{
		int c = a[i]-'a';
		if(trie[s][c]==0)
		{
			return 0;
		}
		s = trie[s][c];
	}
	//return s == 1;
	return cnt[s];
}
 
int main()
{
	
	int n;
	char a[20];
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",a);
		insert(a);
	}
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",a);
		printf("%d\n",search(a));
	}
 
	return 0;
}

理解trie 树:https://www.bilibili.com/video/av58431163

全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1151650次浏览 17149人参与
# 通信和硬件还有转码的必要吗 #
11203次浏览 101人参与
# OPPO开奖 #
19203次浏览 267人参与
# 和牛牛一起刷题打卡 #
18982次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203393次浏览 3627人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4972次浏览 30人参与
# 不去互联网可以去金融科技 #
20391次浏览 255人参与
# 通信硬件薪资爆料 #
265915次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2227次浏览 34人参与
# 互联网公司评价 #
97688次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25037次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454871次浏览 5124人参与
# 国企和大厂硬件兄弟怎么选? #
53903次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14645次浏览 349人参与
# 硬件人的简历怎么写 #
82286次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19398次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28103次浏览 248人参与
# 学历对求职的影响 #
161242次浏览 1804人参与
# 你收到了团子的OC了吗 #
538745次浏览 6387人参与
# 你已经投递多少份简历了 #
344237次浏览 4963人参与
# 实习生应该准时下班吗 #
96978次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63525次浏览 622人参与
牛客网
牛客企业服务