题目描述:先说明此题只有一个测试实例,然后输入一系列的单词,以一个回车为结束符,然后输入一个字符串,要你查找以这个字符串为前缀的单词的个数,处理到文件结束。

解题报告:一开始看到这题,竟然直接用暴力去解了,根本没有想到用字典树,因为字典树是很久以前学的了,刚学的时候一个题都没做,所以现在都忘了,还好这题一次就写出来了,还没有调试,用字典树,要注意的是,一般字典树是在每个点标记有没有以这个点没结束的单词,但是这里要将每个节点标记的成经过这个节点的次数,因为可能有多个单词的前缀相同,这样就会多次经过这个点,如果只标记是否走过的话,就没有办法统计次数了。代码附上:

 #include<cstdio>
#include<cstring> typedef struct node {
char c;
int flag;
node *next[];
node() { //各种初始化
flag = ;
for(int i = ;i<;++i)
next[i] = NULL;
}
}Trie;
void push(Trie *head,char *s) { //插入字符串
int len = strlen(s);
Trie *p = head;
for(int i = ;i<len;++i) {
if(p->next[s[i]-'a'] == NULL) {
p->next[s[i]-'a'] = new Trie;
p->next[s[i]-'a']->c = s[i];
p->next[s[i]-'a']->flag++; //这里要注意因为插入的字符串前缀相同的可能有多个,所以应该统计个数,而不是标记是否存在
p = p->next[s[i]-'a'];
}
else if(p->next[s[i]-'a'] != NULL) {
p->next[s[i]-'a']->flag++;
p = p->next[s[i] -'a'];
}
}
}
int serch(Trie *head,char *s) {
int len = strlen(s);
Trie *p = head;
for(int i = ;i<len;++i) {
if(p->next[s[i]-'a'] == NULL)
return ; //不能走到末尾的字符,直接返回0;
else p = p->next[s[i]-'a'];
if(i == len-)
return p->flag;
}
}
void Delete(Trie *head) {
Trie *p = head;
for(int i = ;i<;++i) {
if(p->next[i] != NULL)
p = p->next[i];
else {
delete p;
return ;
}
}
} int main() {
Trie *head = new Trie;
char s[];
while(gets(s))
if(s[] != NULL)
push(head,s);
else break;
while(scanf("%s",s)!=EOF)
printf("%d\n",serch(head,s));
Delete(head); //清理内存
return ;
}

HDU 1251 统计难题 字符匹配的更多相关文章

  1. hdu 1251 统计难题(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 统计难题 Time Limit: 4000/2000 MS (Java/Others)    M ...

  2. HDU 1251 统计难题 (Trie)

    pid=1251">统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/ ...

  3. hdu 1251 统计难题 (字典树入门题)

    /******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...

  4. HDU 1251 统计难题(Trie模版题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  5. HDU 1251统计难题

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  6. hdu 1251:统计难题(字典树,经典题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  7. hdu 1251 统计难题 trie入门

    统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...

  8. hdu 1251:统计难题[【trie树】||【map】

    <题目链接> 统计难题                        Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131 ...

  9. [ACM] hdu 1251 统计难题 (字典树)

    统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...

随机推荐

  1. Daily Scrumming* 2015.12.17(Day 9)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1077 https://github.com/buaaclubs-team/temp-front/com ...

  2. someday团队Postmortem(事后诸葛亮会议)

    一.会议相关介绍: 时间:2018年1月12日 地点:第九实验楼五楼机房 参会人员:someday团队全体成员 二.每个成员在beta阶段的实践和alpha阶段有何改进? (一)设想和目标: 我们的软 ...

  3. 使用VS2013进行C#程序的单元测试

    没有按照预期的那样做出成功的单元测试,磕磕绊绊参照了下面两篇博客大致做出来了,所以很有必要记录一下过程. http://www.cnblogs.com/duasonir/p/5299732.html( ...

  4. 手写vue双向绑定数据

    来一张原理图: 实现思路: (1)绑定data 种的数据,为每个数据添加指令.通过Object,defineProperty() 来通知属性是否更改 (2) 找到每个DOM节点的指令.绑定事件.并绑定 ...

  5. python项目离线环境配置指南

    参考文献: http://blog.csdn.net/candcplusplus/article/details/52156324 https://www.cnblogs.com/michael-xi ...

  6. Spring MVC的路径匹配规则 Ant-style

    Spring默认的策略实现了 org.springframework.util.AntPathMatcher,即Apache Ant的样式路径,Apache Ant样式的路径有三种通配符匹配方法(在下 ...

  7. 初识elasticsearch_1(基本概念和基本操作)

    初识 ElasticSearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.本博客部分基于es的官方文档.es的官方文档网址如下:h ...

  8. P3000 [USACO10DEC]牛的健美操Cow Calisthenics

    题目描述 Farmer John continues his never-ending quest to keep the cows fit by having them exercise on va ...

  9. Military Problem CodeForces - 1006E(dfs搜一下 标记一下)

    题意: 就是有一颗树  然后每次询问 父结点 的 第k个结点是不是他的子嗣...是的话就输出这个子嗣..不是 就输出-1 解析: 突然想到后缀数组的sa 和 x的用法..就是我们可以用一个id标记当前 ...

  10. 【刷题】LOJ 6121 「网络流 24 题」孤岛营救问题

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...