我想构建一个Scrabble Cheater,它将Strings存储在一系列链表中。在一个完美的场景中,每个链表只有具有相同字母排列的单词(例如POOL和LOOP)。用户会像在OLOP中那样放置一个String,并打印出链接列表。
我希望使用散列显式解决任务。
我为它构建了一个stringHashFunction()(Java代码):
public int stringHashFunction(String wordToHash) {
int hashKeyValue = 7;
//toLowerCase and sort letters in alphabetical order
wordToHash = normalize(wordToHash);
for(int i = 0; i < wordToHash.length(); i++) {
int charCode = wordToHash.charAt(i) - 96;
//calculate the hash key using the 26 letters
hashKeyValue = (hashKeyValue * 26 + charCode) % hashTable.length;
}
return hashKeyValue;
}
它看起来像OK-hash函数吗?我意识到它远非一个完美的哈希,但我怎么能改进呢?
我的代码整体有效,但我现在有以下统计信息:
是否可以避免冲突,以便我只有具有相同排列的存储桶(链表)?我想如果你有一个完整的字典,那么拥有它可能是有用的,这样你每次想要在你的字符串上获得一些可能的排列时,就不必在每个存储桶上运行isPermutation()方法。 / p>