您的位置:首页 > 其它

杭电 HOJ 1251 统计难题 解题报告

2013-02-27 13:07 274 查看
初看以为很简单的。。。当然,直接数组保存单词然后遍历查询一定会超时。在网上搜索了一下,看到“字典树”的概念。自己也没看他的代码,但是却找到了方法了。

字母一共有26个。建立一个结构,里面保存一个大小为26的指针数组,然后读入单词,节点+1。额,看代码更清楚些

#include <iostream>
#include <string>
using namespace std;

class word
{
public:
word()
{
memset(s,0,sizeof(s));
num=0;
}
word *s[26];
int num;
};

int main()
{
int i,len,t;
char str[100];
word *head,*p;
head=new word;
while(cin.getline(str,sizeof(str)) && str[0]!='\0')
{
p=head;
len=strlen(str);
for(i=0;i<len;i++)
{
t=str[i]-'a';
if(p->s[t]==0)
p->s[t]=new word;
p=p->s[t];
p->num++;
}
}
while(cin>>str)
{
p=head;
len=strlen(str);
for(i=0;i<len;i++)
{
t=str[i]-'a';
if(p->s[t]==0)
{
i=-1;
break;
}
p=p->s[t];
}
if(i==-1)
cout<<0<<endl;
else
cout<<p->num<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: