统计单词出现的最多次数(Trie树)

A

Time Limit: 60ms   Memory limit: 65536K  有疑问?点这里^_^

题目描写叙述

给出n(1<= n && n <= 2*10^6)个字符串,每一个字符串仅仅包括小写英文字母,且最多有五个。问这n个字符串中出现次数最多的有多少个。

输入

单组输入。第一行输入一个数字n。接下来n行,每行包括一个字符串。

输出

输出一个数字代表答案。

演示样例输入

5
aba
abb
w
aba
z

演示样例输出

2

參考自算法竞赛训练指南。

话说啸爷出题就爱卡STL。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=900000;
int ch[maxn][26];//ch[i][j]保存节点i的那个编号为j的子节点
int val[maxn];//记录每一个单词上面的附加信息
int sz,Max=-1;//sz为节点总数
void insert(char *s)//插入
{
	int u=0,len=strlen(s);
	for(int i=0;i<len;i++)
	{
		int c=s[i]-'a';
		if(!ch[u][c])
		{
			memset(ch[sz],0,sizeof(ch[sz]));
			ch[u][c]=sz++;
		}
		u=ch[u][c];
	}
	val[u]++;
	if(Max<val[u])
		Max=val[u];
}
int main()
{
    char s[7];int n;
    scanf("%d",&n);getchar();
    sz=1;
    memset(ch[0],0,sizeof(ch[0]));//最開始仅仅有一个根节点
    memset(val,0,sizeof(val));
    while(n--)
	{
		scanf("%s",s);
		insert(s);
	}
	printf("%d\n",Max);
	return 0;
}
时间: 2024-11-14 21:24:31

统计单词出现的最多次数(Trie树)的相关文章

hiho一下 第二周&amp;第四周:从Trie树到Trie图

hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihocoder.com/problemset/problem/1036 trie图其实就是trie树+KMP #1014trie树 #include<stdio.h> #include <algorithm> #include <cstring> #include <str

Trie树的详解及应用

Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高.Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. Trie 的强大之处就在于它的时间复杂度.它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 Trie 中保存了多少个元素无关.Hash 表号称是

Trie树(字典树)的C++实现

问题描述: Trie树 又称单词查找树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 举个例子:os,oh,old,char,chat这些关键词构成的trie树: root /         \ c            o /               /  \ h              s     h /  \ a    t trie树特点: ①根节点不包含字符,其他节点均包含一个字符 ②

树-trie树

字典树(trie树) (图f) 字典树是一种以树形结构保存大量字符串.以便于字符串的统计和查找,经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高.具有以下特点(图f):(1)根节点为空:(2)除根节点外,每个节点包含一个字符:(3)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串.(4)每个字符串在建立字典树的过程中都要加上一个区分的结束符,避免某个短字符串正好是某个长字符串的前缀而淹没. T

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

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字

poj 2945 trie树统计字符串出现次数

用记录附加信息的val数组记录次数即可. PS:trie树还有种动态写法,使用指针和动态分配内存代替了连续的ch数组,更加节省内存. Reference:http://blog.csdn.net/architect19/article/details/8966247 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 #define maxnode

跳跃表,字典树(单词查找树,Trie树),后缀树,KMP算法,AC 自动机相关算法原理详细汇总

第一部分:跳跃表 本文将总结一种数据结构:跳跃表.前半部分跳跃表性质和操作的介绍直接摘自<让算法的效率跳起来--浅谈"跳跃表"的相关操作及其应用>上海市华东师范大学第二附属中学 魏冉.之后将附上跳跃表的源代码,以及本人对其的了解.难免有错误之处,希望指正,共同进步.谢谢. 跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找.插入.删除等操作时的期望时间复杂度均为O(logn),有着近乎替代平衡树的本领.而且最重要的一点,就是它的编程复杂度较同类

【数据结构】字典树/Trie树/前缀树 - 字符串的统计、排序和保存

字典树 描述 字典树,又称单词查找树.Trie树.前缀树,是一种树形结构,是一种哈希树的变种. 典型应用是用于统计.排序和保存大量的字符串(但不仅限于字符串). 常见操作有插入和查找,删除操作少见. 性质 根节点不包含字符 除根节点外每一个节点都只包含一个字符 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 每个节点的所有子节点包含的字符都不相同 优点 利用字符串的公共前缀来减少查询时间 最大限度地减少无谓的字符串比较 查询效率比哈希树高 自带字典序排序 直接判断重复,或者记

ACM:统计难题 解题报告-字典树(Trie树)

统计难题 Time Limit:2000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Submit Status Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignati