如何使用Ruby中重复字符的计数来压缩字符串?

Ach*_*yut 1 ruby

我有这样的功能

def string_compressor(string)
end
Run Code Online (Sandbox Code Playgroud)

它接收一串重复的单词并返回压缩的字符串。例如:如果我通过aaabbbccaa它应该返回a3b3c2a2. 我已经尝试了很多来解决这个问题。有人能帮我解决这个问题吗?

Eri*_*nil 5

您可以将gsub与捕获组和块一起使用:

p 'aaabbbccaaz'.gsub(/(.)\1+/) { |x| "#{Regexp.last_match(1)}#{x.size}" }
# => "a3b3c2a2z"
Run Code Online (Sandbox Code Playgroud)

或块:

p 'aaabbbccaaz'.chars.chunk{|x| x}.map{|x, xx| xx.size > 1 ? "#{x}#{xx.size}" : x}.join
# => "a3b3c2a2z"
Run Code Online (Sandbox Code Playgroud)

  • 重构建议:在您的第二个示例中,您可以编写 `chunk(&:itself)` 并删除 `to_a`。 (2认同)