我想在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
答案 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]}