Сформировать все возможные последовательные комбинации слов из строки

Обновить

December 2018

Просмотры

414 раз

2

Я хочу, чтобы генерировать все возможные комбинации последовательных слов конкретной строки, с учетом минимальной длиной в качестве арг.

Так что у меня есть «привет», то результат будет (по заданному мин Длина 3): «Хель», «флигель», «LLO», «ад», «ELLO», «привет».

Один из способов Я достигнуть этого с помощью:

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

Но не уверен, если это будет работать с большими словами.

1 ответы

2

Это решение позволяет избежать ненужной joins:

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