给定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个最小的字符串。但是它们是更好的方法吗?
答案 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)!)
并获得下一步的分子。同样适用于任何一个分母。