在 Coursera 视频之一中,Rabin-Karp 滚动哈希 ( http://en.wikipedia.org/wiki/Rolling_hash ) 显示为:
public static long getHash(String S)
{
long H = 0;
for (int i = 0; i < S.length(); i++)
H = (H * 10 + S.charAt(i)) % 997;
return H;
}
我认为这是错误的。我认为应该是:
public static long getHash(String S)
{
long H = 0;
for (int i = 0; i < S.length(); i++)
H = (S.charAt(i) * (int)Math.pow(10, (S.length() - i - 1)) + H) % 997;
return H;
}
哪一个是正确的,为什么?