Ruby所有可能的字符串子集

时间:2016-06-04 22:00:37

标签: arrays ruby string

目标:

powerset('hey')
#=> ['h', 'he', 'hey', 'e', 'ey', 'y']

为其他语言提供了几种解决方案,可以适应Ruby,但我想知道是否有更多的Ruby惯用方法。

3 个答案:

答案 0 :(得分:1)

也许某人可以提供功能性解决方案,但这是一个简单的实现:

def ngrams(s)
  xs = s.chars
  acc = []
  (0..xs.length-1).each do |i|
    (i..xs.length-1).each do |j|
      acc << xs[i..j].join
    end
  end
  acc
end

p ngrams("hey")
p ngrams("abcd")

答案 1 :(得分:1)

您可以尝试这样的事情:

str = 'hey'

str.size.times.flat_map{|i| (i+1..str.size).map{|ii| str[i...ii]}}
# => ["h", "he", "hey", "e", "ey", "y"]

Demonstration

答案 2 :(得分:1)

与尖峰相同的一般方法,但使用&#34;魔法&#34; flat_map

def all_substrings(str)
  (0...str.size).flat_map do |i|
    (i...str.size).map do |j|
      str[i..j]
    end
  end
end