【发布时间】:2017-03-26 17:56:33
【问题描述】:
我想使用哈希表来存储单词。 例如,我有两个词 aba 和 aab ,因为它们是由相同的元素组成的,只是顺序不同,所以我想用相同的索引存储它们,并在该链接列表中插入一个链接列表。我很容易以某种方式进行搜索。单词的元素只有 26 个字母。如何设计合适的哈希表索引?如何整理表格?
【问题讨论】:
-
你可以使用素数,例如:stackoverflow.com/a/11117236/905902
我想使用哈希表来存储单词。 例如,我有两个词 aba 和 aab ,因为它们是由相同的元素组成的,只是顺序不同,所以我想用相同的索引存储它们,并在该链接列表中插入一个链接列表。我很容易以某种方式进行搜索。单词的元素只有 26 个字母。如何设计合适的哈希表索引?如何整理表格?
【问题讨论】:
所以你想用你的哈希表回答的问题是:我有哪些字母可以组成什么词?
我假设您正在阅读一些字典并希望将所有值放入哈希表中。然后你可以使用一个 int 数组来计算每个字母作为键出现的次数(例如,'a' 将是索引 0 和 'z' 索引 25)以及你必须使用列表的值,这样你就可以向该条目添加多个单词。
但最简单的解决方案可能只是使用排序后的单词作为键(例如,'aba' 显然也得到键 'aab' 和 'aab'),因为单词不是很长,排序并不昂贵(避免创建通过使用字符数组来一直使用新字符串)。
所以在 Java 中你可以像这样得到密钥:
char[] key = word.toCharArray();
Arrays.sort(key);
// and if you want a string
String myKey = new String(key);
【讨论】: