字符串的固定长度排列

时间:2009-11-13 23:46:04

标签: java permutation

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

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

6 个答案:

答案 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/