str = «aaabbccaaaaddbab»
вывод: {«a»=›8, «b»=›4, «c»=›2, «d»=›2}

Решение1:

str = "aaabbccaaaaddbab"
 => "aaabbccaaaaddbab"

result = {}
=> {}
 str.chars.each do |data|
   result[data] = str.chars.count(data)
 end
=> ["a", "a", "a", "b", "b", "c", "c", "a", "a", "a", "a", "d", "d", "b", "a", "b"]

 result
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}

Решение2:

str.chars.tally
 => {"a"=>8, "b"=>4, "c"=>2, "d"=>2}

Решение3:

result = str.each_char.group_by(&:itself).transform_values(&:count)
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}

Решение4:

str.chars.group_by(&:itself).map {|key, data| [key, data.count]}.to_h
 => {"a"=>8, "b"=>4, "c"=>2, "d"=>2}

Решение5:

result = Hash.new(0) # here we intial the hash with value 0
str.chars.each {|data| result[data] += 1}
 => {"a"=>8, "b"=>4, "c"=>2, "d"=>2}

Решение 6.

 Hash[str.chars.group_by{|i| i }.map{|data, value| [data, value.size]}]
 => {"a"=>8, "b"=>4, "c"=>2, "d"=>2}