![](/img/trans.png)
[英]All permutations of length k from n characters with repetition in CPP
[英]Find all permutations/combinations of length k from given string
这是在接受采访时向我询问的。 给定一个字符串,我必须编写程序来查找长度为k的所有排列/组合。 所以对于string =“cra”和length = 2以下需要在向量中返回:“ca”,“cr”,“rc”,“ra”,“ac”,“ar”。 不允许重复。
有什么建议怎么办呢?
我想出的是使用重复。 基本上循环遍历所有字符并将其添加到序列中。 当长度与给定长度匹配时,它将附加到最终向量。
我会寻找递归的东西,因为我喜欢递归。 “cra”中大小为k的子字符串是:
所以如果我写E组的n个字符,e_i它的元素。
这种东西在黑板上比在数字文本中更适合。 我们试试纯文字:
大小为k的集合E的子串是e_i上的第一个字母为e_i的子串的E的每个元素的并集。
我清楚了吗? 我不知道我是否清楚。
之后,如果存储中间结果,可以通过交换内存使用的计算时间来优化方法,这样您就不必多次计算它们(对于n = 3无关紧要,但它绝对重要当n变大时)。 如果您的起始单词是abcdefgh并且k = 5,那么您将存储子字符串(“cdefgh”,3)之类的内容,这样您就不必为以a开头的单词和以b开头的单词计算它。 你会节省大量的计算时间,但是当n变大时可能需要大量的内存。 如果你有一个内存阈值,最好存储最小k的子串,就像那些最需要请求的那些(递归树的结尾)。
最后一个问题:如何存储? 我选择使用该对的映射(“cdefgh”,3),甚至单独使用“cdefgh”作为键,将子串的集合作为值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.