zoukankan      html  css  js  c++  java
  • hdu 1251 字典树 求前缀有多少个

    做的第一个字典树,非常直观

    第一类是求前缀有多少个,第二类是求前缀是否在一串字符中出现

    主要是字典树的构造,使用了一个嵌套的结构体,使用了指针,非常方便

    也非常巧妙,还有就是root,newnode必须初始空间

    banana
    band
    bee
    absolute
    acm

    ba
    b
    band
    abc

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    struct dictree
    {
    	dictree *child[26];
    	int n;
    };
    
    struct dictree *root;
    
    void insert(char *str)
    {
    	struct dictree *current,*newnode;
    
    	int len=strlen(str);
    
    	current=root;
    
    	for(int i=0;i<len;i++)
    	{
    		if(current->child[str[i]-'a']!=0)
    		{
    			current=current->child[str[i]-'a'];
    			current->n=current->n+1;
    		}else
    		{
    			newnode=(struct dictree*)malloc(sizeof(struct dictree));
    
    			for(int j=0;j<26;j++)
    				newnode->child[j]=0;
    			current->child[str[i]-'a']=newnode;
    			current=newnode;
    			current->n=1;
    		}
    	}
    }
    
    int find(char *str)
    {
    	struct dictree *current;
    
    	int len=strlen(str);
    
    	int i;
    
    	if(len==0)return 0;
    
    	current=root;
    
    	for(i=0;i<len;i++)
    	{
    		if(current->child[str[i]-'a']!=0)
    			current=current->child[str[i]-'a'];
    		else
    			return 0;
    	}
    
    	return current->n;
    }
    
    int main()
    {
    	char strs[11];
    
    	int i;
    
    	root=(struct dictree*)malloc(sizeof(struct dictree));
    
    	for(i=0;i<26;i++)
    		root->child[i]=0;
    
    	root->n=2;
    
    	while(gets(strs),strcmp(strs,"")!=0)
    		insert(strs);	
    	
    	while(scanf("%s",strs)!=EOF)
    	{
    		printf("%d\n",find(strs));
    	}
    
    	return 0;
    }
    

      

  • 相关阅读:
    嵌入式硬件设计时所需考虑的几个问题
    MySQL网络配置
    MySQL数据库操作技术大全
    关于硬件芯片未用引脚的处理方法
    与嵌入式软件开发相关的一些硬件知识
    C语言-联合(union)
    AtCoder Regular Contest 101 D
    AtCoder Regular Contest 101 C
    AtCoder Regular Contest 102 C
    线性基学习
  • 原文地址:https://www.cnblogs.com/jackes/p/2434773.html
Copyright © 2011-2022 走看看