字典树水题:初学的可以看看模板
模板:http://blog.csdn.net/forever_kirito/article/details/76620722
参考题:http://blog.csdn.net/forever_kirito/article/details/76610719
这题字符串的处理要注意一下:
code:
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
struct node
{
int cnt;
node *next[26];
node(){
cnt=0;
for(int i=0;i<26;i++){
next[i] = NULL;
}
}
};
node *root;
int ans = 0;
void Insert(char *str)
{
//printf("%s\n",str);
node *p=root;
int len = strlen(str);
for(int i=0;i<len;i++){
int id = str[i] - 'a';
if(p->next[id]!=NULL){
p = p->next[id];
}
else{
p->next[id]=new node;
p=p->next[id];
}
}
if(p->cnt!=1){
p->cnt=1;ans++;
}
}
void del(node *p)
{
for(int i=0;i<26;i++)
if(p->next[i]!=NULL) del(p->next[i]);
delete(p);
}
int main()
{
char ss[1000];
while(gets(ss)&&strcmp(ss,"#")!=0){
root=new node;
char str[100];
int len=strlen(ss);
ss[len]='*';///让最后一个单词插入到字典树
int t=0;
bool first=false;///在输入多个空格时不读入空格
for(int i=0;i<=len;i++){
if(isalpha(ss[i])){
str[t++]=ss[i];
first=true;
}
else if(first){
str[t]='\0';
t=0;
Insert(str);
first=false;
}
}
printf("%d\n",ans);
ans=0;
del(root);
}
return 0;
}