社区
数据结构与算法
帖子详情
如何快速找出字符串的出现频率
firePhoenix1981
2009-08-10 11:26:26
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。
我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
...全文
439
12
打赏
收藏
如何快速找出字符串的出现频率
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。 我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
编程农场
2009-08-18
打赏
举报
回复
采用我开发的数据结构即可实现:
请参考:http://topic.csdn.net/u/20090818/15/73cfd34b-cdfd-4e5f-9cf2-e069137cce43.html?
61140
步骤
1、先把字符串插入到有序HASH树中,统计相同键值的数量
2、以升序遍历此树即可。
e-mail:freeland007@163.com
QQ: 723273055
komai908
2009-08-14
打赏
举报
回复
map<string,int> word ; ?
黄舒颖 咸丫蛋
2009-08-11
打赏
举报
回复
可行的一种方法。
Hash+Hash
1、先进行hash,对每个字符串,统计其出现次数,最大出现次数m
2、根据出现次数放到桶里面
数组List<int> t[m]
如t[1]中记录出现次数为1的字符串。
3、直接逆向读出来就排好了序了。
[Quote=引用楼主 firephoenix1981 的回复:]
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。
我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
[/Quote]
zb_fly
2009-08-11
打赏
举报
回复
[Quote=引用 2 楼 fancymouse 的回复:]
trie
[/Quote]
同意
firePhoenix1981
2009-08-11
打赏
举报
回复
呵呵,电面的。
单纯的二叉排序数应该没有先hash再来二叉排序树好吧,另外最后要求出出现次数从大到小的排列。TRIE以前一直没有弄明白过,至此好好看看
LeonTown
2009-08-11
打赏
举报
回复
mark
面试官有什么反映吗。。。
showjim
2009-08-11
打赏
举报
回复
[Quote=引用 4 楼 firephoenix1981 的回复:]
呵呵,电面的。
单纯的二叉排序数应该没有先hash再来二叉排序树好吧,另外最后要求出出现次数从大到小的排列。TRIE以前一直没有弄明白过,至此好好看看
[/Quote]
内存足够大的话可以用trie;否则先hash统计再桶排序.
firePhoenix1981
2009-08-11
打赏
举报
回复
我觉得面试官心里想要的就是这个答案吧
[Quote=引用 2 楼 fancymouse 的回复:]
trie
[/Quote]
firePhoenix1981
2009-08-11
打赏
举报
回复
这个方法不错,桶排序,比我的要好
[Quote=引用 6 楼 vshuang 的回复:]
可行的一种方法。
Hash+Hash
1、先进行hash,对每个字符串,统计其出现次数,最大出现次数m
2、根据出现次数放到桶里面
数组List <int> t[m]
如t[1]中记录出现次数为1的字符串。
3、直接逆向读出来就排好了序了。
引用楼主 firephoenix1981 的回复:
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。
我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
[/Quote]
FancyMouse
2009-08-11
打赏
举报
回复
trie
勤奋的沉沦
2009-08-11
打赏
举报
回复
貌似2叉排序树可行呀。
先hash好了,然后将读到得字符串先从树里remove, 如果有则更新下节点, 没有就新加1个节点,然后插入树中, 最后用先序遍历,或者后续遍历的方式能得到1个排好序的序列
acdbxzyw
2009-08-10
打赏
举报
回复
二叉排序树。。。
找出
一个
字符串
的所有anagram
给定一个
字符串
集合S和一个
字符串
str。要求设计一个数据结构,能够
快速
找出
集合S里所有的、是str的anagram的
字符串
。 思路: 首先,要分析什么样的
字符串
才可以互称为anagram。两个
字符串
如果是anagram,它们经过排序后得到的两个
字符串
一定相等。或者,两个
字符串
如果是anagram,它们包含的字符的
频率
一定相等。 所以,基于anagram的这两个性质,可以有以下两种数据结构方案
找出
数组中
出现
次数最多的元素
最近朋友面试,看到一题面试题给大家分享一下。 题目是:一个长度为10000左右的
字符串
数组 var = ['aaa','bbb','ccc'...]请写出一个函数计算
出现
次数最多的
字符串
。 如果仅仅是用普通遍历来做的话就很不优雅了。因为数组长度是10000左右 在网上看到了这样一种方法 挺棒的。 function more(arr) { let max=n...
华为oj
找出
字符串
中第一个只
出现
一次的字符
利用数组对应字符,很好用,它的原理 #include #include using namespace std; int main() { int count[256] = { 0 }; string s; cin >> s; for (int i = 0; i < s.size(); i++) { count[(int)s[i]]++; } //再次遍历从头到尾
python随机生成1000个字母,数字,符号的
字符串
,并统计每个
字符串
出现
的次数
>>> import string>>> import random>>> x = string.ascii_letters + string.digits + string.punctuation>>> y = [random.choice(x) for i in range(1000)]>>> z
卡码网Python基础课|16.
出现
频率
最高的字母
哈希表的概念,哈希表(列表形式)解决统计
字符串
中字符的
出现
频次问题,并找到
出现
频次最大的字符
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章