Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
 

Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.
 

Output
对于每个提问,给出以该字符串为前缀的单词的数量.
 

Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
 

Sample Output
2
3
1
0

 

 

用字典树来做:

 

nstrut dictree  
n{  
n    struct dictree *child[26];  
n    int n;  
n};  

  代码抄于杭电课件上:

 


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

 

  
 

相关文章:

  • 2022-01-25
  • 2021-11-08
  • 2021-10-09
  • 2022-12-23
  • 2021-10-02
  • 2022-12-23
  • 2022-12-23
  • 2021-07-08
猜你喜欢
  • 2021-06-24
  • 2021-06-12
  • 2022-02-11
  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
  • 2021-06-02
相关资源
相似解决方案