3

我想在 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

4 回答 4

8
"aaabbcbbaaa".chars.chunk{|i| i}.map{|m,n| [m,n.count(m)]}
#=> [["a", 3], ["b", 2], ["c", 1], ["b", 2], ["a", 3]]
于 2013-05-02T17:03:14.337 回答
5
"aaabbcbbaaa".scan(/((.)\2*)/).map{|s, c| [c, s.length]}
于 2013-05-02T17:03:47.553 回答
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
于 2013-05-02T17:19:00.137 回答
1
'aaabbcbbaaa'.scan(/((.)\2*)/).map {|e| [e[1], e[0].size]}
于 2013-05-02T17:03:17.717 回答