c-递归算法,以获得特定顺序的字符串组合



有几种算法可以打印字符串的所有组合,但我需要一种按特定顺序打印它们的算法。目前,我正在使用一种标准的排列算法,类似于这个问题的顶部答案中的算法(而不是问题本身):字符串的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

你知道我应该如何修改我的算法以产生这种顺序的组合吗?

对于一个有两个不同字符AC的字符串,给定nA的个数,听起来你要寻找的是这些序列的串联:所有以nA的逆字典顺序开始的排列,所有以n-1A的逆字典序开始的排列等等,您可以按照字典顺序获取现有的输出,并以相反的顺序对其进行迭代,选择与/^A{n}C//^A{n-1}C//^A{0}C/匹配的元素,并将它们添加到新的集合中。

您可以直接生成此输出,方法是生成从nAs到零的每个长度的As字符串,然后对每个字符串按字典顺序的相反顺序附加其余字符的排列。

最新更新