散列函数,看看一个字符串是否是另一个字符串的加扰形式/排列



我想检查字符串A是否只是字符串B的重新排序版本。例如;abc〃="bca〃="驾驶室";。。。

这里还有其他解决方案:https://www.geeksforgeeks.org/check-if-two-strings-are-permutation-of-each-other/

然而,我认为哈希函数是一种简单的方法,但典型的哈希函数会考虑顺序。是否存在不关心字符顺序的哈希函数?

是否有不关心字符顺序的哈希函数?

我不知道现实世界中有多少哈希函数具有这个属性,没有。因为这不是它们设计用来解决的问题。

然而,在这种特定情况下,您可以制作自己的"hash";函数(一个非常非常糟糕的函数(,它确实会忽略顺序:只对字符的ASCII代码求和。这是由于加法(a + b == b + a(的交换性质

def isAnagram(self,a,b):
sum_a = 0
sum_b = 0
for c in a:
sum_a += ord(c)
for c in b:
sum_b += ord(c)
return sum_a == sum_b

重申一下,这绝对是一次黑客攻击,因为输入字符串在判断系统中的内容有限(只有小写ASCII字符,不包含空格(,所以才会起作用。它不会(可靠地(在任意字符串上工作。

为了进行快速检查,您可以使用一种af散列放克

候选人是:

  • xor字符串的所有字符
  • 添加字符串的所有字符
  • 将字符串的所有字符相乘(小心可能会导致大型字符串溢出(

如果哈希值相等,则仍然可能是两个不"相等"的字符串的冲突。因此,您仍然需要进行专门的比较。(例如,对每个字符串的字符进行排序,然后再进行比较(。

最新更新