【发布时间】:2014-06-18 01:03:34
【问题描述】:
假设给定一个长度为N 的字符串S,以及字符串Shash[0][0...N-1] 的所有前缀的哈希值数组。
hash[0][i] 表示以索引i 结尾的字符串S 前缀的哈希值。 M 表示一个大素数。 R 表示哈希函数中使用的基数。
你还得到了使用的哈希函数:
for(int i = 0; i < N; i++) {
hash[0][i] = ( (i > 0 ? hash[0][i - 1] : 0) * R + S.charAt(i) ) % M;
}
我们需要根据需要计算hash[i][j]。给定上述信息,我们能否找出O(1)中S子串的哈希值,即hash[i][j]?
where, i,j > 0 and i,j < N
注意:数组hash[][]最初只包含字符串S前缀的预计算哈希hash[0][0....N-1]。
【问题讨论】:
标签: java string algorithm hash