有几种算法可以打印字符串的所有组合,但我需要一种按特定顺序打印它们的算法。目前,我正在使用一种标准的排列算法,类似于这个问题的顶部答案中的算法(而不是问题本身):字符串的C++递归排列算法->不跳过重复的
例如,对于输入"ABC",输出为:ABC ACB BAC BCA CAB CBA
对于输入"ACC",它将是:ACC CAC CCA
输出都是正确的,但是我需要它们以不同的顺序。输入仅由字符"A"one_answers"C"组成,为了方便起见,在将字符串输入递归函数之前,我会按字母顺序对其进行排序,因此输入字符串将始终具有相同的字符(即AACCC)。至于顺序,我想将"C"的集合视为一个单独的实体,对于字符的每一组排列,我只将其左移到第一个"C"右侧。所以对于输入"ACC",第一个输出是"ACC"这是可以的,下一个输出应该是"CCA",因为我把所有的"C"向左移动了一步,然后所有字符的"CCA"排列到第一个"C"的右边就是最终输出,它只是"ACA"。
对于这些输入,我需要它看起来像这样:
输入:ACC
输出:ACC CCA CAC
输入:AACC
输出:
AACC ACCA ACAC CCAA CACA CAAC
你知道我应该如何修改我的算法以产生这种顺序的组合吗?
对于一个有两个不同字符A
和C
的字符串,给定n
是A
的个数,听起来你要寻找的是这些序列的串联:所有以n
A
的逆字典顺序开始的排列,所有以n-1
A
的逆字典序开始的排列等等,您可以按照字典顺序获取现有的输出,并以相反的顺序对其进行迭代,选择与/^A{n}C/
、/^A{n-1}C/
到/^A{0}C/
匹配的元素,并将它们添加到新的集合中。
您可以直接生成此输出,方法是生成从n
A
s到零的每个长度的A
s字符串,然后对每个字符串按字典顺序的相反顺序附加其余字符的排列。