#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个的小写英 ...
随机推荐
- 使用eclipse作为python开发工具安装旧版pydev
在Eclipse中: Help->Install New Software add之后输入的链接地址 https://dl.bintray.com/fabioz/pydev/old/ 如果使用从 ...
- css(二)
本文是一些作者在长期写代码中总结的常用css查询,写在本博客中,方便以后查询. 1. 颜色属性: color HEX(十六进制色:color: #FFFF00 --> 缩写:#FF0) RG ...
- 春节快乐!推荐一个关于 SharePoint 和 BI 的视频,笑死我了
在春节即将来临的日子里,我偶然看到了这个相见恨晚的视频:Attractive Business Intelligence 我几乎是从头笑到尾看完的,太有趣儿了!特别适合放假.过节的时候看.本来今天下午 ...
- 将oracle冷备份恢复到另外一个数据库实例中
因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...
- Android M Permission 运行时权限 学习笔记
Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...
- Thread多线程(二):Runnable
如果要让其他类使用线程就要用到runnable,其他thread就是实现了runnbale接口,其中run()方法就是对runnable接口中的run()方法的具体实现.有两个构造函数分别是: ...
- AFN3.0封装
总结了一下AFN3.0封装,也借鉴了其他人总结的,整理如下,希望多交流,互相进步 // // XJYSessionManager.h// // Created by XJY on 16/10/17. ...
- Windows平台分布式架构实践 - 负载均衡 上
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- 安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章
Windows 10操作系统是目前Windows平台最新的操作系统,其相对于其它旧版的操作系统是一个比较成功的操作系统.微软直接使用10版本号,跳过了9版本号进行发布这款操作系统,说明windows ...
- .NET架构设计、框架设计系列文章总结
从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以 ...