2016-06-20 11 views
0

Javaの.hashCode()メソッドを使用して、特定の長さの文字列に対して可能な最小/最大ハッシュコードを計算する方法はありますか?特定の長さの文字列の最小/最大hashCode値を見つける

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 

...、それは、正または負であってもよいintを返し:

docsから、使用されるアルゴリズムです。

それはハッシュを計算するために、すべての文字が追加されますので、私は、最小/最大文字値(space = 32、~ =で構成された同じ長さの文字列に.hashCode()を実行することにより、最小/最大ハッシュを発見しようとしました126)、私は最小/最大ハッシュの範囲外のsの値を取得します。

int s =  "hello world".hashCode(); // 1794106052 

// strings the same len as "s" 
int minHash = "   ".hashCode(); // 2142006304 
int maxHash = "~~~~~~~~~~~".hashCode(); // -2034832962 

// hash for s i 

答えて

1

文字列の長さが少なくとも6である場合には、最小の可能なハッシュコードはInteger.MIN_VALUE、最大ハッシュコードは、Integer.MAX_VALUEあります。

つまり、長さ6の文字列には、Integer.MIN_VALUEのhashCodeと、Integer.MAX_VALUEのhashCodeを持つ長さ6の文字列があります。

hashCodeで意図したとおりに動作している整数オーバーフローが表示されています。

+0

Aha!それは多くの意味がある(私はそれが溢れていたと思った、ちょうどどこを把握することができませんでした)あなたは私が6文字で起こる理由を教えてもらえますか? – JeffThompson

+1

最初のnここで、126 * 31 ^(n-1)> Integer.MAX_VALUEは6です。 –

+0

Gotcha。そして、6文字未満の文字列の最小/最大ハッシュをどのように計算すればよいでしょうか? – JeffThompson

関連する問題