以任何顺序给出的相同字符集的唯一哈希?

Posted

技术标签:

【中文标题】以任何顺序给出的相同字符集的唯一哈希?【英文标题】:Unique hash for same set of characters given in any order? 【发布时间】:2015-04-18 09:09:22 【问题描述】:

考虑这个寻找字谜的例子

aabc
abca

它们都是字谜,我正在寻找一种方法,使它们由字符生成的哈希值相同且唯一。

唯一性很重要,因此不会有两个不同的字符串aabcxyaq 生成相同的哈希

我对此一无所知,但在这里呕吐以了解我需要查找的内容

【问题讨论】:

您正在寻找的是一个完美的散列函数(假设"aabc".equals("abca") 在有限的Set 中并一起代表Set 中的不同元素。)。您的问题定义必须是有限的,任何人都可以提出解决方案。 哈希本质上永远不会是唯一的。要么找到一种可以接受的方法,要么找到一些非哈希方法。 this is an idea 【参考方案1】:

对字符串中的字符进行排序并将其用作哈希。字符串将具有相同的散列如果它们是彼此的字谜:

String anagramHash(String str) 
    char[] chars = str.toCharArray();
    Arrays.sort(chars);
    return new String(chars);

如果您的代码点不在 BMP (http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html) 上,这可能不起作用。

或者,生成一个直方图并将其用作哈希。

【讨论】:

不同的字符串可以有相同的hash,所以当且仅当部分不成立。

以上是关于以任何顺序给出的相同字符集的唯一哈希?的主要内容,如果未能解决你的问题,请参考以下文章

通用字典类键值

HashSet

无论顺序如何,获取字符串列表的哈希

如何为android中的字符串输入生成唯一的哈希码...?

2021-09-16:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。按键2对应:‘

为所有字谜生成相同的唯一哈希码