找到Kth按字典顺序排列的最小字符串

时间:2014-08-26 20:43:28

标签: algorithm

给定N A和N B如何找到长度为2 * N的所有字符串的Kth词典最小字符串。

如果N = 2则意味着我们有2A和2B然后如果我们需要找到说2(= K)最小的词典最小字符串然后回答是“ABBA”。

说明:

0.AABB
1.ABAB
2.ABBA
3.BAAB
4.BABA
5.BBAA

一种方法是简单地找到所有字符串并对它们进行排序然后找到第k个最小的字符串。但是它们是更好的方法吗?

1 个答案:

答案 0 :(得分:0)

首先让我们从左开始。你有N A和N B。 首先计算A作为第一个字符的可能字符串数。它是 (2n-1)!/((n-1)!(n)!)如果此值大于K,那么我们的字符串将以K开头,否则它将以B开头。现在,继续前进我们有两种情况

案例1:如果它以A开头,那么下一步要检查的A的数量将减少1.我们将检查(2n-2)!/((n-2)!(n!)) K的值无需更新。

案例2:如果它以B开头,则下一步要检查的B的数量将减少1.我们将检查(2n-2)!/((n-1)!(n-1)!) 1的值将更新为{{1}我们继续使用新值。

复杂性问题:我们不需要每次都计算因子。由于我们看到分子中的阶乘一直在递减,我们可以将其除以K - (2n-1)!/((n-1)!(n)!)并获得下一步的分子。同样适用于任何一个分母。