题目大意:本题是中文题。可以直接在OJ上看
解题思路:其实就是求某个节点的使用的次数
代码如下:
/*
* 1251_3.cpp
*
* Created on: 2013年8月24日
* Author: Administrator
*/
#include <iostream>
using namespace std;
struct node{
int count;
struct node* next[26];
};
node* root;
node* newset(){
node* current;
current = (node*)malloc(sizeof(node));
int i;
for( i = 0 ; i < 26 ; ++i){\
current->next[i] = NULL;
}
current->count = 1;
return current;
}
void insert(char* s){
node* current;
int len = strlen(s);
if(len == 0){
return ;
}
current = root;
int i;
for(i = 0 ; i < len ; ++i){
if(current->next[s[i] - 'a'] != NULL){
current = current->next[s[i] - 'a'];
current->count = current->count + 1;
}else{
current->next[s[i] - 'a'] = newset();
current = current->next[s[i] - 'a'];
}
}
}
int find(char* s){
node* current;
int len = strlen(s);
if(len == 0){
return 0;
}
current = root;//****
int i;
for( i = 0 ; i < len ; ++i){
if(current->next[s[i] - 'a'] != NULL){
current = current->next[s[i] - 'a'];
}else{
return 0;
}
}
return current->count;
}
int main(){
char str[12];
root = newset();
int ans;
while(gets(str) && str[0]!='\0'){
insert(str);
}
while(scanf("%s",str)!=EOF){
ans = find(str);
printf("%d\n",ans);
}
}