社区
数据结构与算法
帖子详情
如何快速找出字符串的出现频率
firePhoenix1981
2009-08-10 11:26:26
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。
我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
...全文
391
12
打赏
收藏
如何快速找出字符串的出现频率
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。 我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
二叉排序树。。。
C语言小程序,统计
字符串
中字符
出现
频率
,随后可以匹配替换指定字符
C语言小程序,统计
字符串
中字符
出现
频率
,随后可以输入指定字符,来和原字符进行匹配,随后可以输入要替换的字符,即可完成替换
vfp统计
字符串
中某字符重复
出现
次数
vfp统计
字符串
中某字符重复
出现
次数,可以扩展到统计vfp数据库表中某字段中某字符重复
出现
的次数。
查找
字符串
中
出现
重复次数最多的字符
查找
字符串
中
出现
重复次数最多的字符,面试中经常遇到的面试题,对找工作很有帮助,拿出来与大家一起学习进步。
统计
字符串
中每个字符
出现
次数并排序工具
一个统计
字符串
中每个字符
出现
次数并排序的工具,统计一段字符中
出现
次数最多的字。
找到
字符串
S第一个不在T中
出现
的字符.rar
这是学习书上的一个小程序。功能是将S和T这两个单链表存储的串,
找出
S串中第一个不在T中
出现
的字符。
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章