#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个的小写英 ...
随机推荐
- 使用CruiseControl.Net全面实现持续集成
持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文的主要目的是实战CruiseControl.Net,用它来全 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- 使用Object.create 克隆对象以及实现单继承
var Plane = function () { this.blood = 100; this.attack = 1; this.defense = 1; }; var plane = new Pl ...
- [threeJs][新浪股票api][css3]3D新浪财经数据-最近A股涨的也太疯了......
使用threeJS搭配新浪股票财经API 在线: http://wangxinsheng.herokuapp.com/stock 截图: A股涨幅榜[一片红10%] 检索[单击添加到自选内,自选使用l ...
- 安全生产应急救援指挥系统之GIS一张图-flex/java
开发语言是flex.java,开发平台是myeclise.eclise,后台数据库是oracel或sqlserver,开发接口是arcgis api for flex,提供以下的功能: 1.地图框选搜 ...
- Android Activity launchMode研究
Android Activity launchMode研究 Activity的Launch mode一共有四种: standard, singleTop, singleTask, singleInst ...
- UItableView与UICollectionView
UITableView 1. UITableViewStyleGrouped 分区表格样式创建表格 .separatorStyle = UITableViewCellSeparatorStyleSin ...
- Top 10 Methods for Java Arrays
作者:X Wang 出处:http://www.programcreek.com/2013/09/top-10-methods-for-java-arrays/ 转载文章,转载请注明作者和出处 The ...
- ThinkPHP3快速入门教程二:数据CURD
CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...
- TCP流量控制与拥塞控制
为了更好地对传输层进行拥塞控制,因特网建议标准定义了以下四种算法:慢启动.拥塞避免.快重传和快恢复. 1 接收窗口rwnd与拥塞窗口cwnd 发送方在确定发送报文段的速率时,既要根据接收方的接收能力, ...