字典树
来源:互联网 发布:熊猫智能电视直播软件 编辑:程序博客网 时间:2024/06/05 20:13
字典树,就是利用数据结构树对多个单词进行存储,以单个字母为节点。在建树的同时对需要的数据进行统计。优点是利用字符串公共前缀,最大限度地减少查询过程中字符的重复比较。
常见的字典树用于查询含有给定前缀的单词数。
hihocoder #1014,就是利用类似的题目。。。
我在刷这道题时,RE了一次由于题目没有看清,在最外层多加了一个while循环(用以多次建树及查询,格式问题导致的错误)。TLE一次,在字符串输入前多加了 fflush(stdin)造成的。。。。。
初次写博客。。。。 现在上#1014代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
int L;
struct Node* childNode;
}Node;
int main()
{
int k = 0,i = 0,j = 0,m=0;
int length = 0,flag = 0;
char word[11] = "\n";
Node* pNode = NULL;
Node forest;
forest.childNode = malloc(sizeof(Node)*26);
for(m=0;m<26;m++)
forest.childNode[m].L = 0;
forest.L = 0;
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%s",word);
length = strlen(word);
pNode = &forest;
for(j=0;j<length;j++)
{
pNode = &pNode->childNode[word[j]-'a'];
pNode->L++;
if(pNode->L == 1)
{
pNode->childNode = malloc(sizeof(Node)*26);
for(m=0;m<26;m++)
pNode->childNode[m].L = 0;
}
}
}
scanf("%d",&k);
for(i=0;i<k;i++)
{
flag = 0;
// fflush(stdin);//没必要的,很费时
scanf("%s",word);
length = strlen(word);
pNode = &forest;
for(j=0;j<length;j++)
{
pNode = &pNode->childNode[word[j]-'a'];
if(pNode->L == 0)
{
flag = 1;
printf("0\n");
break;
}
}
if(!flag)
printf("%d\n",pNode->L);
}
return 0;
}
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 图标网站
- Java提高篇(四):渐析java的浅拷贝和深拷贝
- spring MVC + bootstrap实现文件上传(带进度条)
- thinking in java test练习(8)(9)this关键字
- Mysql数据查询优化
- 字典树
- iOS---修改Xcode7建立的工程名称
- Android自定义控件实战——下拉刷新控件终结者:PullToRefreshLayout
- Java归并排序算法实现
- 学习网站整理
- Git学习笔记(二) 远程Git
- 技术-mysql-时间的语句
- 这才是跳槽黄金时机,踩准了!
- java 三种嵌入jsp的方法