所有在红宝石中分割k个部分的字符串的方法

时间:2022-09-26 21:38:10

What is the best way to get an array that contains an array for every way to split a string in k factors, where the factors might also be empty? As an example, if k is 3 and the string is

获取包含数组的数组的最佳方法是将每个方法拆分为k因子中的字符串,其中因子也可能为空?例如,如果k为3且字符串为

Hello

then I would like a return value as follows:

那么我想要一个返回值如下:

[ ["", "", "Hello"], ["","H","ello"], ["", "He", "llo"], ..., ["H", "e", "llo"], ["H", "el", "lo"], ..., ["Hello","",""] ]

And I would like to have this in a function, so that k is parameter (for a fixed k I would just write k-1 loops). Is there a nice way to do that in ruby?

我希望在一个函数中有这个,所以k是参数(对于固定的k我只会写k-1循环)。在红宝石中有一个很好的方法吗?

Thanks for your help!

谢谢你的帮助!

2 个解决方案

#1


3  

s = "Hello"
k = 3
(0..s.length).to_a.repeated_combination(k - 1)
.map{|a| [0, *a, -1].each_cons(2).map{|i, j| "#{s} "[i...j]}}

result:

结果:

[
  ["", "", "Hello"],
  ["", "H", "ello"],
  ["", "He", "llo"],
  ["", "Hel", "lo"],
  ["", "Hell", "o"],
  ["", "Hello", ""],
  ["H", "", "ello"],
  ["H", "e", "llo"],
  ["H", "el", "lo"],
  ["H", "ell", "o"],
  ["H", "ello", ""],
  ["He", "", "llo"],
  ["He", "l", "lo"],
  ["He", "ll", "o"],
  ["He", "llo", ""],
  ["Hel", "", "lo"],
  ["Hel", "l", "o"],
  ["Hel", "lo", ""],
  ["Hell", "", "o"],
  ["Hell", "o", ""],
  ["Hello", "", ""]
]

#2


0  

Using recursion:

使用递归:

def doit(s, k, b = [], r = [])
  case k
  when 0
    r << b
  when 1
    doit( [], 0, b + [s], r )
  else  
    (0..s.size).each { |i| doit( s[i..-1], k-1, b + [s[0,i]], r ) }     
  end
  r
end

v = doit('Hello', 3)
 #=> [["", "", "Hello"],["", "H", "ello"],["", "He", "llo"],["", "Hel", "lo"],
 #    ["", "Hell", "o"],["", "Hello", ""],["H", "", "ello"],["H", "e", "llo"],
 #    ["H", "el", "lo"],["H", "ell", "o"],["H", "ello", ""],["He", "", "llo"],
 #    ["He", "l", "lo"],["He", "ll", "o"],["He", "llo", ""],["Hel", "", "lo"],
 #    ["Hel", "l", "o"],["Hel", "lo", ""],["Hell", "", "o"],["Hell", "o", ""],
 #    ["Hello", "", ""]] 

#1


3  

s = "Hello"
k = 3
(0..s.length).to_a.repeated_combination(k - 1)
.map{|a| [0, *a, -1].each_cons(2).map{|i, j| "#{s} "[i...j]}}

result:

结果:

[
  ["", "", "Hello"],
  ["", "H", "ello"],
  ["", "He", "llo"],
  ["", "Hel", "lo"],
  ["", "Hell", "o"],
  ["", "Hello", ""],
  ["H", "", "ello"],
  ["H", "e", "llo"],
  ["H", "el", "lo"],
  ["H", "ell", "o"],
  ["H", "ello", ""],
  ["He", "", "llo"],
  ["He", "l", "lo"],
  ["He", "ll", "o"],
  ["He", "llo", ""],
  ["Hel", "", "lo"],
  ["Hel", "l", "o"],
  ["Hel", "lo", ""],
  ["Hell", "", "o"],
  ["Hell", "o", ""],
  ["Hello", "", ""]
]

#2


0  

Using recursion:

使用递归:

def doit(s, k, b = [], r = [])
  case k
  when 0
    r << b
  when 1
    doit( [], 0, b + [s], r )
  else  
    (0..s.size).each { |i| doit( s[i..-1], k-1, b + [s[0,i]], r ) }     
  end
  r
end

v = doit('Hello', 3)
 #=> [["", "", "Hello"],["", "H", "ello"],["", "He", "llo"],["", "Hel", "lo"],
 #    ["", "Hell", "o"],["", "Hello", ""],["H", "", "ello"],["H", "e", "llo"],
 #    ["H", "el", "lo"],["H", "ell", "o"],["H", "ello", ""],["He", "", "llo"],
 #    ["He", "l", "lo"],["He", "ll", "o"],["He", "llo", ""],["Hel", "", "lo"],
 #    ["Hel", "l", "o"],["Hel", "lo", ""],["Hell", "", "o"],["Hell", "o", ""],
 #    ["Hello", "", ""]] 

相关文章