#1014 Trie树
本题主要是求构造一棵Trie树,即词典树用于统计单词。
C#代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TestOJ
{
public class AplusB
{
static void Main()
{
TestTrie1();
}
private static void TestTrie1()
{
int n = int.Parse(Console.ReadLine());
Trie trie = new Trie();
for (int i = ; i < n; i++)
{ string line = Console.ReadLine();
trie.Insert(line);
}
int m = int.Parse(Console.ReadLine());
for (int i = ; i < m; i++)
{
string line = Console.ReadLine(); Console.WriteLine(trie.Serch(line)); }
}
class Trie
{
public Trie()
{
root = new TrieNode();
}
const int SIZE = ;
TrieNode root;
public void Insert(string str)
{
TrieNode node = root;
for (int i = ; i < str.Length; i++)
{
var c = str[i];
var idx = c - 'a';
if (node.Nodes[idx] == null)
{
TrieNode temp = new TrieNode();
temp.value = c;
node.Nodes[idx] = temp;
}
else
{
node.Nodes[idx].num++;
}
node = node.Nodes[idx];
}
node.isEnd = true;
}
public int Serch(string str)
{
TrieNode node = root;
for (int i = ; i < str.Length; i++)
{
var c = str[i];
var idx = c - 'a';
if (node.Nodes[idx] == null)
return ;
node = node.Nodes[idx];
}
return node.num;
}
class TrieNode
{
internal TrieNode[] Nodes;
internal bool isEnd;
internal char value;
internal int num;
public TrieNode()
{
Nodes = new TrieNode[SIZE];
num = ;
}
}
}
}
}
该代码耗时 3312ms,内存 107MB。
如果仅从实现统计功能需求来考虑的话,我的另一个方式是使用字典来进行统计。原理是对每一个单词进行从头到尾的拆分,每一次拆分的单词作为一个key,value则统计每一次获取到该key的次数。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TestOJ
{
public class AplusB
{
static void Main()
{
int n = int.Parse(Console.ReadLine());
Dictionary<string, int> dict = new Dictionary<string, int>(n * );
for (int i = ; i < n; i++)
{ string line = Console.ReadLine();
for (int j = ; j <= line.Length; j++)
{
string cut = line.Substring(, j);
if (!dict.ContainsKey(cut))
{
dict.Add(cut, );
}
else
{
dict[cut]++;
}
}
}
int m = int.Parse(Console.ReadLine());
for (int i = ; i < m; i++)
{
string line = Console.ReadLine();
if (dict.ContainsKey(line))
{
Console.WriteLine(dict[line]);
}
else
{
Console.WriteLine();
}
}
}
}
}
该代码耗时 3069ms,消耗内存 48MB。
可以看到耗费的时间和内存都有所减少,缺点是无法统计到匹配的是那些单词。
#1014 Trie树的更多相关文章
- hiho #1014 : Trie树
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...
- hihoCoder 1014 Trie树 (Trie)
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮 ...
- Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...
- hihoCoder #1014 : Trie树 [ Trie ]
传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...
- codevs——4189 字典&&HihoCoder #1014 : Trie树
题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的 ...
- 【Hihocoder】1014 : Trie树
问题:http://hihocoder.com/problemset/problem/1014 给定一个字符串字典dict,输入字符串str, 要求从dict中找出所有以str为前缀的字符串个数. 构 ...
- 1014 : Trie树 hihocoder
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. ...
- #1014 : Trie树 HihoCoder(字典树)
描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...
- hiho #1014 : Trie树(模板)
Trie树 [题目链接]Trie树 &题意: 输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英 ...
随机推荐
- zookeeper集群
0,Zookeeper基本原理 ZooKeeper集群由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点,其他节点都为Follower.当客户端Client连接到Zo ...
- 云南南天电子信息产业股份有限公司某站SQL注入漏洞
220.163.13*.** root@kali:~# sqlmap -u http://www.****.com.cn/****.Aspx?keyword= -v 1 --dbs --tam ...
- iOS之应用发布中的一些细节
Bundle identifier Xcode中 Target -> General中的bundle identifier ; info.plist中的Bundle identifier; 证书 ...
- UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置
一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果 ...
- Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上
本文是gtest高级测试指南的译文,由于文章太长,分上下两部分. 一.简介 本文档将向您展示更多的断言,以及如何构造复杂的失败消息,传播致命的故障,重用和加速您的测试夹具,并在您的测试使用各种标志. ...
- python 函数式编程
1高阶函数 1.1 变量可以指向函数,可以把一个函数赋值给变量 如下代码 >>> f = abs >>> f(10) 10 1.2 变量可以指向函数,函数的形参也能 ...
- ns3重要类
1. simple-ref-count 递归模板,使得通过定义T:SimpleRefCount<T>使得T类都具有计数功能 template <typename T, typenam ...
- [Erlang 0103] Erlang Resources 资讯小站
好久没有写博客,是懒了吗?不是;前面两个月在紧张地推进一个项目,中间积累了一些RabbitMQ和Erlang的东西;本打算在项目结束之后赶紧总结一下,结果老婆怀孕之后生活节奏大乱:早起做饭,晚上 ...
- Ant :Property
Property Ant 内置的Property 系统属性 Ant附加的属性 自定义Property Ant :Property properties是由key-value组成的集合,就是Java中 ...
- WinForm常用属性
Text: 字符串,窗体标题 MaximizeBox: 布尔, 窗体能否最大化 MinimizeBox: 布尔,窗体能否最小化 ShowIcon: 布尔,左上角图标 ShowInTaskbar: 布尔 ...