输入n个字符串,查询m次,每次输入一个字符串T,求n个字符串中是否存在单词T (单词最长100,其他数据长度均在10^3)。
输入:
5
hello hi hello hi time
hi
输出
exists
#include<bits/stdc++.h>
using namespace std;
struct trie{
int son[27];
int val;
}tree[100010];
char s[110];
int tot=1;
void insert(char s[]){
//abbd
int len=strlen(s),p=1;
for(int i=0;i<len;i++){
int c=s[i]-'a'; //'a'---0
if(tree[p].son[c]==0){
tree[p].son[c]=++tot;
}
p=tree[p].son[c];
}
tree[p].val++;
}
int find(char s[]){
int len=strlen(s),p=1;
for(int i=0;i<len;i++){
int c=s[i]-'a';
if(tree[p].son[c]==0){
return 0;
}
p=tree[p].son[c];
}
return tree[p].val;
}
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
insert(s);
}
cin>>m;
while(m--){
cin>>s;
int t=find(s);//返回s出现的次数
if(t) cout<<"exists "<<t<<endl;
else cout<<"no"<<endl;
}
return 0;
}