hdu 1251(字典树)

题意:容易理解。。。

思路:很简单的字典树,容易求解,但是也有坑爹的地方。

代码实现:

#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
struct node{
struct node *next[26];
int num;
node()
{
memset(next,NULL,sizeof(next));
num=1;
}
};
struct node *root;
void insert(char *str)
{
struct node *p=root;
int index;
for(;*str!='\0';str++)
{
index=*str-'a';
if(p->next[index]==NULL)
p->next[index]=new node;
else
p->next[index]->num++;
p=p->next[index];
}
}
int find(char *str)
{
struct node *p=root;
int index;
for(;*str!='\0';str++)
{
index=*str-'a';
if(p->next[index]!=NULL)
p=p->next[index];
else
return 0;
}
return p->num;
}
void del(struct node *tree)//虽然题目明确指出只有一组测试数据,但还是养成好的习惯释放内存
{
int i;
for(i=0;i<26;i++)
{
if(tree->next[i]!=NULL)
del(tree->next[i]);
}
delete(tree);//c++中的,c语言中是free
}
int main()
{
char str[20];
root=new node;
while(1)
{
gets(str);//scanf("%s",str);//这个地方很坑爹,用scanf他妈的就是不行
if(strlen(str)==0)//因为scanf是无法读入空格的
break;
insert(str);
}
while(scanf("%s",str)!=EOF)
{
  printf("%d\n",find(str));
}
del(root);
return 0;
}

原文地址:https://www.cnblogs.com/jiangjing/p/2951710.html