Следующее:
strings = ["ab","aa","ab","bb","ba","aba","aab"]
@strings = strings.uniq!
@given_string = 'abaababbab'
@given_length = @given_string.length
def parse
@parses.each do |parse|
before = parse.pop # offset of the part that hasn't yet been parsed
@strings.each do |str|
next unless m = @given_string.match(str, before)
first, last = m.offset(0)
next unless first == before
if last == @given_length
@completed_parses.push([*parse, str])
else
@new_parses.push([*parse, str, last])
end
end
end
@parses = @new_parses
@new_parses = []
parse unless @parses.empty?
end
@parses = [[0]]
@new_parses = []
@completed_parses = []
parse
p @completed_parses
даст вам:
[["aba", "aba", "bb", "ab"], ["ab", "aa", "ba", "bb", "ab"]]
Я не понимаю, почему в вашем ответе ["ab","aab","ab","ba","bab"]
.