hihocoder #1014 : Trie树
题目大意:
给你一个n个单词的字典,然后再给你m个前缀,询问在这个字典中,每次我找到的以该前缀的字符串的个数。
解题思路:
看着代码一步一步学会的,就是简单的trie的应用。
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int root=0;
int tot;
struct node
{
int cnt;
int next[26];
void newnode()
{
cnt=0;
for(int i=0;i<26;i++)
{
next[i]=-1;
}
}
}t[1000005];
void clear()
{
tot=0;
t[root].newnode();
}
void insert(char *str)
{
int p=root;
int len=strlen(str);
for(int i=0;i<len;i++)
{
int id=str[i]-'a';
if(t[p].next[id]==-1)
{
t[++tot].newnode();
t[p].next[id]=tot;
}
p=t[p].next[id];
t[p].cnt++;
}
}
int query(char *str)
{
int p=root;
int len=strlen(str);
for(int i=0;i<len;i++)
{
int id=str[i]-'a';
if(t[p].next[id]==-1)
{
return 0;
}
p=t[p].next[id];
}
return t[p].cnt;
}
int main()
{
int n,m;
char s[15];
clear();
scanf("%d",&n);
while(n--)
{
scanf("%s",s);
insert(s);
}
scanf("%d",&m);
while(m--)
{
scanf("%s",s);
printf("%d\n",query(s));
}
return 0;
}

浙公网安备 33010602011771号