gpt4 book ai didi

java - 给定一组字符串段,有没有办法计算 hashCode 使其等于连接字符串的 hashcode?

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:46 27 4
gpt4 key购买 nike

考虑:

String[] segments = {"asdf", "qwerty", "blahblah", "alongerstring", "w349fe3434"};
String fullString = "asdfqwertyblahblahalongerstringw349fe3434";

有没有一种有效的方法来组合段中每个元素的 hashCode(),使其等于 fullString 的 hashCode?

显然,如果我遍历所有段中的每个字符,我可以得到与 fullString.hashCode() 相同的结果,但这并没有利用每个段字符串对象中缓存的哈希码。我想避免遍历每个段的每个字符。此外,我无法缓存段的循环哈希码,因为段集可能会组合起来创建一个完整的字符串。

所以基本上,我想要这样的东西:

int segmentHash = 0;
for(int i = 0; i < segments.length; i++)
{
segmentHash = combine(segmentHash, segments[i].hashCode());
}
assert(segmentHash == fullString.hashCode());

可能吗?

最佳答案

令人惊讶的是,是的。

查看 StringhashCode is calculated 是怎样的(s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]), 你需要做以下内容:

  1. 追加一段:将初始段的哈希码乘以31^L,其中L为第二段的长度,加上第二段的哈希码
  2. 对其余部分重复执行相同的操作。

编辑:
当然,您还需要知道段的长度。没有这些信息,计算显然是不可能的。

关于java - 给定一组字符串段,有没有办法计算 hashCode 使其等于连接字符串的 hashcode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com