寻找最常见的基础

时间:2012-05-09 08:52:42

标签: java algorithm

假设我需要比较'n'值并找出最少记录中出现的最常见范围,我们怎样才能有效地做到? 例如: 假设值为
AABBCCDD
AABBEEFF
QWBBGGUU
SDBBGGOO
AABBGGHH

在这种情况下,输出应该是AABB。


我们只需要最常见的前提值。所以输出不会是BBGG

可以使用散列图找出一种方法,但如果可能的话,我们需要找到更好的方法。

1 个答案:

答案 0 :(得分:1)

找到至少50%字符串共有的最长前缀:

  • 在字符串上运行一次,查看每个字符的第一个字符,计算每个字符出现的次数(甚至更好,使用多数查找算法)。

  • 如果您没有找到多数首字母,则解决方案为空字符串。

  • 如果您确实找到了多数第一个字母,请重复检查第二个字母(计算所有字符串的第二个字母,这些字母具有多数第一个字母,但在确定它是否仍为多数时,或者不是当然必须包括所有字符串)。最终你不再找到多数,回报你所拥有的一切。

一种完全不同的方法:构建所有字符串的Trie,并在每个节点中维护具有该前缀的字符串数量。然后从根向下走树,在每一步寻找大于或等于n/2的计数。如果找到一个,请按照它。如果你不这样做,停下来。如果你的规则比“多数人共享的最长前缀”更复杂,那么你也可以在Trie的其他地方查找。