ruby - 生成字符串的所有可能的连续单词组合

标签 ruby string combinations words

我想生成特定字符串的所有可能的连续单词组合,给定最小长度作为参数。

假设我有“hello”,结果将是(最小长度为 3):“hel”、“ell”、“llo”、“hell”、“ello”、“hello”。

我实现这一目标的一种方法是通过:

def get_all_word_combinations(str, min_length)
    chars = str.split('')
    all_results = []

    (min_length..str.size).each do |x|
      chars.each_cons(x) do |r|
        all_results << r.join
      end
    end
    return all_results
  end

但不确定这是否适用于更大的单词。

最佳答案

此解决方案避免了不必要的连接:

word     = "hello"
size     = word.size
min_size = 3

(min_size..size).flat_map { |l| (0..size - l).map { |i| word[i, l] } }
#=> ["hel", "ell", "llo", "hell", "ello", "hello"]

如果您不需要数组,而只需要迭代每个可能的子字符串,则此解决方案将使用更少的内存:

(min_size..size).each do |l|
  (0..size - l).each do |i|
    # do something with word[i, l]
  end
end

关于ruby - 生成字符串的所有可能的连续单词组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524160/

相关文章:

ruby - 如何将 SHA1 哈希字符串截断为 32 位字符串

string - 如何在 Dart 中对字符串列表进行排序?

python - 在Python中递归生成n个选择k个组合的列表 - 但返回一个列表

java - 如何使这种组合/排列方法递归?

没有 for 循环的 R 二进制详尽列表

ruby - 如何在嵌套属性中自定义错误消息?

ruby-on-rails - ruby rails : Converting "SomeWordHere" to "some word here"

c - 字符数组和整型数组的区别

c - C 中字符串定义的具体细节是什么?

ruby-on-rails - Ruby:时间值的数学函数