一道字典树,并不难。坑的是c++与g++的区别,我也没搞懂。但是g++交oj是MLE。
#include<cstdio>
#include<cstring>
struct node
{
node *nex[27];
int cnt;
node()
{
memset(nex, 0, sizeof(nex));
cnt = 0;
}
};
void build_tree(char *str, node *rt)
{
node *p = rt;
int len = strlen(str);
for(int i = 0; i < len; i++)
{
int pos = str[i] - 'a';
if(p->nex[pos] == NULL)
p->nex[pos] = new node();
p = p->nex[pos];
p->cnt += 1;
}
}
void search_tree(char *str, node *rt)
{
int ans = 0;
node *p = rt;
int len = strlen(str);
int flag = true;
for(int i = 0; i < len; i++)
{
int pos = str[i] - 'a';
if(p->nex[pos] != NULL)
p = p->nex[pos];
else {flag = false; break;}
}
if(flag) ans = p->cnt;
printf("%d\n", ans);
}
int main()
{
char str[20];
node *rt = new node();
while(gets(str))
{
if(!strcmp(str, "")) break;
build_tree(str, rt);
}
while(scanf("%s", str) == 1)
{
search_tree(str, rt);
}
return 0;
}