版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37404150/article/details/78505329
第一次见到 以输入空行结束 学到了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int trie[400001][26],len,root,tot,sum[400001];
char s[11];//这里的s设为全局变量,插入和查询都是用的这个s
void insert()
{
len=strlen(s);
root=0;
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
if(!trie[root][id]) trie[root][id]=++tot; //如果root子节点不含id所表示的字母,那么给trie[root][id]编号
sum[trie[root][id]]++;//sum表示以trie[root][id]为前缀的单词出现的的次数
root=trie[root][id];//更改根节点,继续向下
}
}
int search()
{
root=0;
len=strlen(s);//此时的s为要查询的前缀
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
if(!trie[root][id]) return 0;
root=trie[root][id];
}
return sum[root];
}
int main()
{
while(gets(s)&&strcmp(s,"")!=0){
insert();
}
while(cin>>s){
printf("%d\n",search());
}
}