题目链接
思路
字典树的模板题,但要注意读入的问题。对于string类型的数据用getline(cin,word)。而对于char[]型则
使用cin.getline(word,(num))。具体分析可以参考下面的博客
getline用法
个人认为这个代码模版比较好理解
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <string>
using namespace std;
struct trie{
trie *next[30];
int num;
trie(){ 构造函数
for(int i=0;i<26;i++)
next[i]=NULL;
num=0;
}
};
trie root;
void Insert(char word[]){
trie* p=&root;
for(int i=0;word[i];i++){
if(p->next[word[i]-'a']==NULL)
p->next[word[i]-'a']=new trie;
p=p->next[word[i]-'a'];
p->num++;
}
}
int Find(char word[]){
trie* p=&root;
for(int i=0;word[i];i++){
if(p->next[word[i]-'a']==NULL)
return 0;
p=p->next[word[i]-'a'];
}
return p->num;
}
int main(){
char word[15];
memset(word,'\0',sizeof(word));
while(cin.getline(word,12)){
if(strlen(word)==0) break;
Insert(word);
memset(word,'\0',sizeof(word));
}
while(~scanf("%s",word)){
printf("%d\n",Find(word));
memset(word,'\0',sizeof(word));
}
return 0;
}