所有长度为k的字符串,可以由一组n个字符组成

时间:2017-07-04 03:16:52

标签: r string

此问题已被要求用于其他语言,但我正在寻找最常用的方法来查找可以由R中的一组k个字符组成的所有长度为n的字符串

输入和输出示例:

input <- c('a', 'b')

output <- c('aa', 'ab', 'ba', 'bb')

4 个答案:

答案 0 :(得分:5)

比我想要的复杂一点。我认为outer()仅适用于n=2combn不包括重复。

allcomb <- function(input = c('a', 'b'), n=2) {
  args <- rep(list(input),n)
  gr <- do.call(expand.grid,args)
  return(do.call(paste0,gr))
}

感谢@thelatemail的改进......

allcomb(n=4)
## [1] "aaaa" "baaa" "abaa" "bbaa" "aaba" "baba" "abba"
## [8] "bbba" "aaab" "baab" "abab" "bbab" "aabb" "babb"
## [15] "abbb" "bbbb"

答案 1 :(得分:2)

根据AK88的答案,outer可用于k的任意值,但它不一定是最有效的解决方案:

input <- c('a', 'b')
k = 5
perms = input
for (i in 2:k) {
    perms = outer(perms, input, paste, sep="")
}
result = as.vector(perms)

答案 2 :(得分:1)

m <- outer(input, input, paste, sep="")
output = as.vector(m)

## "aa" "ba" "ab" "bb"

答案 3 :(得分:1)

我对这看起来并不感到自豪,但它有效......

allcombs <- function(x, k) {

  apply(expand.grid(split(t(replicate(k, x)), seq_len(k))), 1, paste, collapse = "")

}

allcombs(letters[1:2], 2)
#> [1] "aa" "ba" "ab" "bb"

allcombs(letters[1:2], 4)
#>  [1] "aaaa" "baaa" "abaa" "bbaa" "aaba" "baba" "abba" "bbba" "aaab" "baab"
#> [11] "abab" "bbab" "aabb" "babb" "abbb" "bbbb"