问题:http://hihocoder.com/problemset/problem/1014

给定一个字符串字典dict,输入字符串str, 要求从dict中找出所有以str为前缀的字符串个数。

构建Trie树:

1) 一个节点有多个子节点。用vector<Node*> nexts 存储。

2) 两个字符串的相同前缀部分共用同一条路径。

3) 每个节点包含计数变量 cnt, 表示有多少个字符串共用该节点

复杂度分析:

假定dict中的字符串个数 n, 字符串的长度 l

1)建树:O(n^2*l)

2) 查找:O(n*l)

源码:

 #include <iostream>
#include <vector>
#include <string>
using namespace std; //node structure in Trie tree
struct Node
{
Node(char _chr = -){chr = _chr; cnt = ;}
char chr;
vector<Node*> nexts;
int cnt;//how many strings pass current node
}; int main()
{
Node* root = new Node;//root of dictornary
Node* current;
vector<Node*> v_current;
int cnt, vsize, i, j, strLen;
string str; //create Trie tree
cin>>cnt;
while(cnt-- > )
{
cin>>str;
strLen = str.length();
current = root;
for(i = ; i < strLen; i++)
{
v_current = current->nexts;
vsize = v_current.size();
//try to find str[i] in current tree
for(j = ; j < vsize; j++)
{
if(v_current[j]->chr == str[i])
break;
}
if(j == vsize)//not found, create a new node
{
Node* tmp = new Node(str[i]);
current->nexts.push_back(tmp);
}
current = current->nexts[j];
current->cnt++;//increase count of current node
}
} cin>>cnt;
while(cnt-- > )
{
cin>>str;
strLen = str.length();
current = root;
for(i = ; i < strLen; i++)
{
v_current = current->nexts;
vsize = v_current.size();
for(j = ; j < vsize; j++)
if(v_current[j]->chr == str[i])
break;
if(j == vsize)//not found
{
cout<<''<<endl;
break;
}
current = v_current[j];
}
if(i == strLen)
cout<<current->cnt<<endl;
}
return ;
}

【Hihocoder】1014 : Trie树的更多相关文章

  1. hihoCoder #1014 : Trie树 [ Trie ]

    传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...

  2. hihoCoder 1014 Trie树 (Trie)

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮 ...

  3. Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  4. codevs——4189 字典&&HihoCoder #1014 : Trie树

    题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的 ...

  5. hihoCoder 1014 : Trie树(字典树)

    传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小 ...

  6. hihoCoder#1014 Trie树 (前缀树)

    题目大意:给一本有n个单词的词典,有m次询问,每次询问的是该词典中有多少个单词有共同的某个前缀. 题目分析:在添加单词建立trie的时候,每经过一个节点就意味着该节点和它的各级祖先节点是某个单词的前缀 ...

  7. hihocoder 1014: Trie树(Trie树模板题)

    题目链接 #include<bits/stdc++.h> using namespace std; ; struct T { int num; T* next[]; T() { num=; ...

  8. hiho #1014 : Trie树

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  9. 1014 : Trie树 hihocoder

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. ...

随机推荐

  1. 在64位Win7中使用Navicat Premium 和PL\SQL Developer连接Oracle数据库备忘

    最近接手了一个项目,服务器端数据库是oracle 11g 64位.由于主要工作不是开发,也不想在自己的电脑上安装庞大的oracle数据库,因此寻思着只通过数据库管理工具连接数据库进行一些常用的查询操作 ...

  2. FAST特征点检测

    Features From Accelerated Segment Test 1. FAST算法原理 博客中已经介绍了很多图像特征检测算子,我们可以用LoG或者DoG检测图像中的Blobs(斑点检测) ...

  3. waterMarkTextBox

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  4. 智能车学习(五)—— dac学习

    一.代码共享: 1.dac.h #ifndef DAC_H_ #define DAC_H_ #include "common.h" // 2.2 DAC控制寄存器0 位定义 #de ...

  5. matlab报错

    这可能说明..压根就没有这个函数

  6. .NET C# Tostring() format 格式化字符串大全

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  7. LoadRunner性能测试执行过程的问题

    LoadRunner做性能测试 从设计到分析执行 执行测试并分析调优: 测试中报错的信息解决: 1. Failed to connect to server "域名:80": [1 ...

  8. UVA 11475 后缀数组/KMP

    题目链接: 题意:给定一个只含字母的字符串,求在字符串末尾添加尽量少的字符使得字符串为回文串. 思路:因为只能从末尾添加字符,所以其实求的是最长的后缀回文串.那么添加的字符为除了这个原串的最长后缀回文 ...

  9. iOS NSDate获取当前时间并格式化

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM- ...

  10. javascript选取文档元素

    用指定的id属性 用指定的name属性 用指定的标签名字 用指定的CSS类 匹配指定的CSS选择器 通过ID选取元素 var section1 = document.getElementById(&q ...