2009-11-13 117 views
2

我正在尝试使用七个字符的字符串并生成所有可能的3和4个字母的排列。这看起来像递归会很方便(大多数我看到的所有置换生成器都是递归的),但是我一直在如何避免重复。也就是说,如果我的输入字符串是“aabcdef”,我不希望任何排列包含两个以上的“a”字符。字符串的固定长度排列

您可以提供的任何见解都非常感谢。

回答

0

使函数获得一组字母,使其返回以您指定的字母开头的n个排列(3或4)的集合。然后为您的套件中的每个独特字符运行一次。

完整的结果集将成为子集的联合。

2

这可以迭代地和递归地完成。这是一个体面的permutation generator。这可以根据您的需要进行调整,并制作通用的(以获取元素的List<T>),以便它可以获取数字,字符串(字符列表)等列表。

0

这里有一条线索可能有帮助。如果您输入了“aabcdef”,而您不想使用两个“a”排列,则更容易从输入中移除其中一个“a”,而不是尝试消除具有多个“a”的排列你生成它们。

1

尝试将角色当作元素放入角色包中。

下面是一些伪代码,应该工作:

permute (bag <character> : theBag, integer : length, string : resultSoFar) 
    if length <= 0 then: 
     print resultSoFar 
     exit 
    end-if 

    for each x in theBag: 
     nextResult = resultSoFar + x 
     nextBag = theBag - x 
     permute(nextBag, length - 1, nextResult) 
    end-for 
end-method 

祝你好运!

0

@ Chip Uni:当我实现你的代码时,它产生了长度为x到max的所有排列。所以当我给一个长度为3的长度为3的包装袋包含7个字符时,它会产生长度为3到7的所有排列。但是,消除大于长度4的所有结果是一件简单的事情。

非常感谢你,你们都!我非常感谢您的建议和帮助。

相关问题