题意:
中文题。
题解:
字典树求单词数,简单操作,恶心的是HDU的一些数据,有一些数据可以全部是空格,或者前面是小写字母后面是空格,或者间隔两个空格的。。。反正恶心。你们可以求测试一下这些数据:
1.” ”
0
2.” asdf as a”
3
3.” asdf asdf ds”
2
4.”asdf asdf ”
1
5.直接输回车
0
赋值双引号里面的数据。
以上数据为HDU的一位友人(黑暗中的火光)所提供。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int cnt;
node *next[26];
node(){
cnt=0;
for(int i=0;i<26;i++)
next[i]=0;
}
}*root;
int sum;
void insert(char *s)
{
node *r=root;
int len=strlen(s);
for(int i=0;i<len;i++)
{
if(s[i]==' ')
{
if(i==0||s[i-1]==' ')
continue;
if(r->cnt==0)
r->cnt=1,sum++;
r=root;
continue;
}
int x=s[i]-'a';
if(r->next[x]==0) r->next[x]=new(node);
r=r->next[x];
}
if(r->cnt==0&&s[strlen(s)-1]!=' '&&s[strlen(s)-1]!='\0')
r->cnt=1,sum++;
}
void del(node *head)
{
for(int i=0;i<26;i++)
if(head->next[i])
del(head->next[i]);
delete(head);
}
int main()
{
char s[5000];
while(gets(s))
{
root=new(node);
sum=0;
if(s[0]=='#')
break;
insert(s);
printf("%d\n",sum);
del(root);
}
}