>>97 ruby 1.8.6
def bmmap(s)
cs = s.scan(/./)
(0...cs.size - 1).inject({}) {|m, i| m[cs[i]] = cs.size - 1 - i; m}.update({cs.last=>cs.size})
end
p bmmap('hello')
p bmmap('boyer-moore')
↓
{"l"=>1, "o"=>5, "e"=>3, "h"=>4}
{"m"=>4, "-"=>5, "b"=>10, "y"=>8, "o"=>2, "e"=>11, "r"=>1