Ruby String编码连续的字母频率

时间:2013-05-02 16:50:40

标签: ruby

我想在Ruby中编码一个字符串,以便输出成对,以便我可以解码它。我想以这样一种方式编码:每对包含字符串中的下一个不同的字母,并且连续重复的数字。

例如,如果我编码“aaabbcbbaaa”输出应该 [[“a”,3],[“b”,2],[“c”,1],[“b”,2],[“a”,3]]

这是代码。

def encode( s )
    b = 0
    e = s.length - 1
    ret = [] 
    while ( s <= e )
        m = s.match( /(\w)\1*/ )
        l = m[0][0]
        n = m[0].length
        ret << [l, n]
    end
    ret
end

4 个答案:

答案 0 :(得分:8)

"aaabbcbbaaa".chars.chunk{|i| i}.map{|m,n| [m,n.count(m)]}
#=> [["a", 3], ["b", 2], ["c", 1], ["b", 2], ["a", 3]]

答案 1 :(得分:5)

"aaabbcbbaaa".scan(/((.)\2*)/).map{|s, c| [c, s.length]}

答案 2 :(得分:4)

您也可以在程序上执行此操作。

def group_consecutive(input)
  groups = []
  input.each_char do |c|
    if groups.empty? || groups.last[0] != c
      groups << [c, 1]
    else
      groups.last[1] += 1
    end
  end
  groups
end

答案 3 :(得分:1)

'aaabbcbbaaa'.scan(/((.)\2*)/).map {|e| [e[1], e[0].size]}