我正在尝试使用七个字符的字符串并生成所有可能的3和4个字母的排列。这看起来像递归会很方便(我见过的大多数排列生成器都是递归的),但我一直在坚持如何避免重复。也就是说,如果我的输入字符串是“aabcdef”,我不希望任何排列包含两个以上的“a”字符。
非常感谢您提供的任何见解。
答案 0 :(得分:2)
这可以迭代地和递归地完成。这是一个不错的permutation generator。这可以根据您的需要进行调整,并使其成为通用的(采用List<T>
元素),这样就可以获取数字列表,字符串(字符列表)等等。
答案 1 :(得分: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
祝你好运!
答案 2 :(得分:0)
创建一个带有一组字母的函数,使其返回以您指定的字母开头的n个排列(3或4)的集合。然后为您集合中的每个唯一字符运行一次。
完整的结果集将是子集的并集。
答案 3 :(得分:0)
这是一条可能有帮助的线索。如果您输入“aabcdef”并且您不希望使用两个“a”的排列,则更容易从输入中删除其中一个“a”而不是尝试使用多个“a”来消除排列你生成它们。
答案 4 :(得分:0)
@ Chip Uni:当我实现你的代码时,它生成了长度为x到max的所有排列。因此,当我用一个包含7个字符的包给它长度为3时,它产生了长度为3到7的所有排列。但是,消除大于长度4的所有结果是一件简单的事情。
非常感谢,你们呀!非常感谢您的建议和帮助。
答案 5 :(得分:0)
这是在Ruby中,但它可能会有所帮助: http://trevoke.net/blog/2009/12/17/random-constrained-permutations-in-ruby/