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;
}
posted on 2013-03-09 16:51 后端bug开发工程师 阅读(217) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号