【发布时间】:2023-04-10 04:02:01
【问题描述】:
假设给定字符串s = "aba" 和k = 2。那么我们可以使用字符串字符进行的排列是
aa ab ba
所以答案是 3。
如果s = "aabb" 和k = 2 则可能的排列是
aa ab ba bb
所以答案是 4。
我们只能使用一个字符在字符串中出现的次数或少于该字符的次数,但不能多于该字符。
有什么公式或者方法可以快速找出来吗?
注意:K 不是唯一字符的数量,例如。 s = "aabbcdd" k 的值可能是k = 3。
【问题讨论】:
-
这似乎更适合Mathematics Stack Exchange。请查看他们的help pages 了解更多信息。
-
这些东西对你有什么意义
C(n,k) = n! /k!(n-k)!或A(n,k) = n!/(n-k)!? -
查看如果 s= "aabb" 和 k=2 那么可能的排列是 "aa" "ab" "ba" 和 "bb"。所以答案是 4。
-
答案是肯定的。这些被称为多重集的排列,并且有一些关于这个主题的写得很好的文章(包括计数算法)。我最喜欢的是 Frank Ruskey 的 Combinatorial Generation。
-
@TraianGEICU ,这个问题的答案并不像你建议的那么简单。例如,尝试找出长度为 6 的“aaaaabbbbcccdde”的唯一排列数。
标签: java c++ algorithm permutation