HDOJ-1251(字典树)
来源:互联网 发布:淘宝美版三星s7能买吗 编辑:程序博客网 时间:2024/06/05 14:15
字典树
导引问题 (HDOJ-1251)
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Tire树的性质
性质:它有3个基本性质:
- 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
- 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
- 每个节点的所有子节点包含的字符都不相同。
模版代码
#include <iostream>#include <cstdio>#include <string.h>using namespace std;struct WordNode{ //num可以表示一个字典树到此有多少相同前缀的数目,这里根据需要应当学会自由变化。 int num ; //next是表示每层有多少种类的数,如果只是小写字母,则26即可, //若改为大小写字母,则是52,若再加上数字,则是62了,这里根据题意来确定。 WordNode * nextNode[26];};WordNode wordNode[10000000];int index ;WordNode * ip ;void insertNode(char str[11]){ ip = wordNode ; for(int i = 0; i < strlen(str);i ++) { if(ip->nextNode[str[i] - 'a'] != 0) { ip->nextNode[str[i] - 'a']->num ++ ; } else { index ++ ; ip->nextNode[str[i] - 'a'] = wordNode + index ; ip->nextNode[str[i] - 'a']->num = 1 ; } ip = ip->nextNode[str[i] - 'a'] ; }}int search(char str[11]){ ip = wordNode ; for(int i = 0; i < strlen(str); i ++) { if(ip->nextNode[str[i] - 'a'] != NULL) ip = ip->nextNode[str[i] - 'a'] ; else return 0 ; } return ip->num ;}int main(){ char temp[11]; while(gets(temp)) { if(strlen(temp)==0) break; insertNode(temp) ; } while(gets(temp) != NULL) { cout<<search(temp)<<endl; } return 0;}
0 0
- HDOJ-1251(字典树)
- hdoj 1251 字典树
- HDOJ-1251 字典树
- 解题报告-HDOJ-1251(字典树)
- HDOJ 1251 统计难题(字典树)
- hdoj--1251--统计难题(字典树)
- HDOJ 1251 统计难题 (字典树)
- HDOJ 1251 统计难题(字典树)
- hdoj 1251 统计难题(字典树)
- hdoj-1251统计难题(字典树)
- HDOJ 题目1251统计难题(字典树,模板)
- hdoj 1251 统计难题(经典字典树)
- hdoj 统计难题 1251 (字典树模板)
- HDOJ 1251 统计难题 字典树
- [HDOJ 1251] 统计难题 [字典树]
- HDOJ 1251 统计难题 字典树
- hdoj 1251 统计难题 【字典树】
- HDOJ 统计难题 1251 【字典树】
- Android 实例讲解HorizontalScrollView实现左右滑动
- java gc学习笔记
- UVa 133 The Dole Queue
- 一些安卓框架
- android安装新版本,双进程问题
- HDOJ-1251(字典树)
- urlrewriter 的用法
- 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”
- C语言二维数组矩阵动态内存分配
- iOS_16_控制器切换_modal_代码方式
- MSP430基础时钟模块学习
- iOS学习之sqlite的创建数据库,表,插入查看数据
- Spring 发送带模板的邮件
- MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决