Другой вариант - преобразовать строку в массив и использовать Enuberable chunk_ Между тем для него:
num.each_char.chunk_while {|i, j| j == i }.to_a
#=> [["1"], ["2", "2"], ["3", "3", "3"], ["4", "4", "4", "4"], ["5"]]
Таким образом, вы можете получить, например:
num.each_char.chunk_while {|i, j| j == i }.map(&:join) #=> ["1", "22", "333", "4444", "5"]
Или просто получить самую длинную строку, например, так:
num.each_char.chunk_while {|i, j| j == i }.max_by(&:length).join() #=> "4444"