问题: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. Java学习随笔3:遍历文件夹及文件的读取和写入

    import java.io.File; /** * 遍历文件夹 */ public class ScannerFile { public static void main(String[] args ...

  2. svg可缩放矢量图形

    可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. <svg xmlns="http://www.w ...

  3. MIT 6.828 JOS学习笔记1. Lab 1 Part 1: PC Bootstrap

    Lab 1: Booting a PC Part 1: PC Bootstrap 介绍这一部分知识的目的就是让你能够更加熟悉x86汇编语言,以及PC启动的整个过程,而且也会首次学习使用QEMU软件来仿 ...

  4. loadrunner怎么将变量保存到参数中

    用这个lr_save_string 函数 char *b = "很简单";lr_save_string(b,"b"); lr_output_message(&q ...

  5. 通过PHP扩展phpredis操作redis

    我们使用phpredis,这个扩展能让你用PHP操作redis. 源码下载: phpize ./configure ); var_dump($result); echo $redis->get( ...

  6. HTTP 请求方式: GET和POST的比较(转)

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...

  7. TweenMax参数补充

    构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓动的对象 duration:Number ...

  8. Angular JS 学习之简介

    1.Angular JS是一个JavaScript框架,它是一个以JavaScript编写的库,它可以通过<script>标签添加到HTML页面: <script src=" ...

  9. node.js整理 06异步编程

    回调 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了 function heavyCompute(n, callback) { var count = 0, i, j; for (i = ...

  10. 分享Kali Linux 2016.2第42周镜像文件

    分享Kali Linux 2016.2第42周镜像文件Kali Linux官方在10月16日发布Kali Linux 2016.2的第42周镜像文件.这一次不再像上几次,推迟提供32位镜像文件,而是同 ...