首页 > 解决方案 > 如何删除3个或更多相同的字符

问题描述

在我学习 Ruby 的过程中,我遇到了这个练习。我正在尝试连续删除 3 个或更多相同的字符。测试用例 输入:abbbaaccada 输出:ccada 输入:bbccdddcb 输出:(空字符串)

到目前为止,我有没有返回预期结果的解决方案:

def playground("abbbaaccada")
  count = string.length
  string.chars.each_with_index.map { |v, i| (v * (count - i)).capitalize }.join('')
end

output gives me
==> AaaaaaaaaaaBbbbbbbbbbBbbbbbbbbBbbbbbbbAaaaaaaAaaaaaCccccCcccAaaDdA
instead of
==> ccada

您能否提一些建议?

编辑:忘记添加不允许的正则表达式

标签: ruby

解决方案


这里有两个挑战:

  • 匹配并删除一行中的任何一个或多个字符
  • 递归再次测试,以防上一步创建了三个新的运行

这是一种方法:

THREE_OR_MORE = /(.)\1{2,}/
def three_is_too_many(str)
  if str.match? THREE_OR_MORE
    str = three_is_too_many(str.gsub(THREE_OR_MORE, ''))
  end
  str
end

正则表达式查找任何字符 ('.'),后跟自身 ('\1'),两次或更多次 ('{2,}')。

然后例程a)删除三个或更多并再次测试或b)返回字符串。


推荐阅读