我的程序包含输出文本(字符串)的算法。最终我想打印出出现次数最多的单词。但在我这样做之前,我需要将它存储在一个数据结构中。所以我想知道什么数据结构是最好的(简单有效的)存储字符串然后能够获得最频繁的元素?我不想使用任何库。谢谢
问问题
1957 次
4 回答
3
我不认为任何数据结构都能做到这一点,但这就是我的做法。
将每个单词的a 保留Map<String, Integer>
为遇到它的次数,并在更新地图时跟踪与存储的最大数字相对应的字符串。例如:
String maxWord = null;
Integer maxCount = -1;
Map<String, Integer> wordCount = new HashMap<String, Integer>();
for (String str : getMyProgramOutput()) {
if (!wordCount.containsKey(str)) { wordCount.put(str, 0); }
int count = wordCount.get(str) + 1;
if (count > maxCount) {
maxWord = str;
maxCount = count;
}
wordCount.put(str, count);
}
于 2013-01-29T23:41:00.787 回答
1
你为什么不建立一个最大堆,在每个节点中都有String
and integer_occurrence
。获取最频繁的单词,获取堆的根
于 2013-01-29T23:47:19.573 回答
1
创建一个Map<String, Integer>
. 每次输入String
增量时Integer
(您可能必须创建自己的MutableInteger
类。完成搜索后(或保持运行计数)
于 2013-01-29T23:39:33.767 回答
0
您可能要考虑在数据库中使用字典。因为这些数据通常必须保存在物理介质中,以防止系统重启后丢失。在这种情况下,字典很有帮助。您唯一需要做的就是建立一个字典表和其他表来存储频率和定位等信息。
于 2013-01-30T01:01:03.117 回答