题目地址:
https://www.lintcode.com/problem/hash-function/description
给定一个字符串 s s s,给定一个数 h a s h _ s i z e hash\_size hash_size定义其哈希函数为 h ( s ) = ( s [ − 1 ] + s [ − 2 ] ∗ 33 + s [ − 3 ] ∗ 3 3 2 + . . . ) % h a s h _ s i z e h(s)=(s[-1]+s[-2]*33+s[-3]*33^2+...)\%hash\_size h(s)=(s[−1]+s[−2]∗33+s[−3]∗332+...)%hash_size。要求计算其哈希值。
要用long来做,以防溢出,最后转成int。代码如下:
public class Solution {
/**
* @param key: A string you should hash
* @param HASH_SIZE: An integer
* @return: An integer
*/
public int hashCode(char[] key, int HASH_SIZE) {
// write your code here
long res = 0;
if (key == null || key.length == 0) {
return 0;
}
for (int i = 0; i < key.length; i++) {
res = res * 33 + key[i];
res %= HASH_SIZE;
}
return (int) res;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。