您的位置:首页 > 其它

HDU2072——单词数

2015-04-23 18:45 309 查看
字典树模板套用,求不同单词数的个数。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <algorithm>
using namespace std;

const int MAX=26;

typedef struct TrieNode
{
int flag;
struct TrieNode *next[MAX]; //该节点的后续节点
} TrieNode;

TrieNode Memory[1000000];
int allocp = 0;
char s[50000];
int sum=0;
TrieNode * createTrieNode()
{
TrieNode * tmp = &Memory[allocp++];
tmp->flag = 1;
for (int i = 0; i < MAX; i++)
tmp->next[i] = NULL;
return tmp;
}

void insertTrie(TrieNode *  pRoot, char * str)
{
TrieNode * tmp = pRoot;
int i = 0, k;
//一个一个的插入字符
int sign=1;
while (str[i])
{
k = str[i] - 'a'; //当前字符 应该插入的位置
if (tmp->next[k])
{
if(str[i+1]=='\0'&&tmp->next[k]->flag==1)
sum++;
}
else
{
if(sign)
{
sum++;
sign=0;
}
tmp->next[k] = createTrieNode();

}

tmp = tmp->next[k];
i++; //移到下一个字符
}
tmp->flag=0;

}

int main(void)
{
char temp[1000];
int i;
int length;
int j;
while(gets(s))
{
if(s[0]=='#')
return 0;
sum=0;
length=strlen(s);

allocp=0;
TrieNode *Root = createTrieNode();
i=0;
while(i<length)
{
j=0;
while(s[i]!=' '&&i<length)
{
temp[j++]=s[i++];

}
while(s[i]==' '&&i<length)
{
i++;
}
temp[j]='\0';
//printf("%s\n",temp);

insertTrie(Root,temp);
}
printf("%d\n",sum);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: