|
|
1
9
我会按照你确定的“第一个位置”——找到“最少”的字符;如果它出现两次,就用下一个字符作为断开连接的字符(等等)。然后你可以旋转到一个“规范”的位置,并以普通的方式散列它。如果绳子的整个过程都是断绳器,那么你就得到了一根自转的绳子(如果你明白我的意思的话),你选哪个做“第一”并不重要。 所以:
|
|
|
2
7
正如Jon指出的,第一种方法不能很好地处理重复字符串。当遇到重复的字母对并且结果为0时,会出现问题。这里有一个修改,我相信修正了原来的算法。它使用 Euclid-Fermat sequences 我还稍微清理了一下算法。注意,包含EF序列的数组只支持0x00到0xFF范围内的字符。这只是演示算法的一种廉价方法。此外,该算法还有运行时O(n),其中n是字符串的长度。
第一个版本(尚未完成):
输出为:
|
|
3
2
通过始终从“最低”(按字母顺序排列)子字符串的位置开始,可以找到确定的第一个位置。所以在你的情况下,你总是从“a”开始。如果有多个“a”,你必须考虑两个字符等等。 |
|
|
4
1
我确信您可以找到一个函数,它可以生成相同的哈希,而不管输入中的字符位置如何,但是,您如何确保
即使在生成哈希之后,也需要进行一些额外的检查,以确保字符串包含相同的字符。 |
|
|
5
1
示例用法:
然后根据需要对结果调用.GetHashCode()。
|
|
|
6
1
一种可能性是将输入的所有循环移位的散列函数组合成一个不依赖于输入顺序的元散列。
你可以用任何其他的交换运算来代替^=。 更举个例子,考虑输入
为了得到我们吃的杂碎 hash(“abcd”)^hash(“dabc”)^hash(“cdab”)^hash(“bcda”)。
|
|
|
7
0
我在大学里为一个项目做过类似的事情。我用了两种方法来优化一个旅行推销员问题。我认为如果不能保证元素是唯一的,那么第二个解决方案需要更多的检查,但是第一个应该可以工作。 如果可以将字符串表示为关联矩阵,则abcdef将如下所示
另一个更快的技巧是旋转字符串,使“第一个”字母是第一个。那么,如果你有相同的起点,同样的字符串将是相同的。 下面是一些Ruby代码:
|
|
|
8
0
可能对每个偏移量使用滚动哈希(类似RabinKarp)并返回最小哈希值?但可能会有碰撞。 |
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |