有一个“文件”的数据集 - 文件名,后面跟着32位数 - 就像文件的哈希一样。
"file1" 6a9bd9a6 1df3b24b 7ab054dc
"file2" 6a9bd54e 1df3b24b 8cd054dc
"file3" 6a9bd9a6 7ab054dc
我将如何获取唯一文件,因此s2不是任何其他s2的前缀 - 这意味着该数字是唯一的。如果有两个相同的s2,如果它们不是任何其他s2的前缀,则它们都是唯一的。
我正在寻找快速解决方案。我可以提出解决方案来比较每个字符串,但它太费时间和无效。另一个选择是以某种方式使用MySQL引擎表,但我不知道如何。你能帮我吗?
答案 0 :(得分:2)
您可以使用trie来确保没有字符串是任何其他字符串的前缀。
当你插入你的特里时,你会检查这两种情况:
1)我是否通过了旧的叶子节点?如果是这样,那意味着另一个字符串是我的字符串的前缀 2)我想将已经存在的非叶子标记为叶子吗?如果是这样,我是另一个字符串的前缀。
这将是一个O(N)解决方案,其中N是字符串的数量(测量插入到trie中的插入次数)。每个插入运行其字符串的长度。
所以如果你想从这里创建哈希。您可以轻松地遍历trie,然后在到达所需的叶子后使用有关前缀节点的信息。每个叶节点代表一个完整的路径,它知道它是否是另一个字符串的前缀。如果它是前缀,则它至少有1个子节点。