ruby - 如何删除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
您能否提一些建议?
编辑:忘记添加不允许的正则表达式
解决方案
这里有两个挑战:
- 匹配并删除一行中的任何一个或多个字符
- 递归再次测试,以防上一步创建了三个新的运行
这是一种方法:
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)返回字符串。
推荐阅读
- python-3.x - 需要帮助找出此代码有什么问题。[2 用户名和密码]
- python - 代码在输出末尾留下随机字符串
- javascript - 使用渐变文本更改元素的 HTML 内容不会在 chrome 中重新呈现
- hive - ST_Aggr_Union 失败,没有匹配方法异常
- html - 我的标题被包含在我的主要标签中
- javascript - 将 Vue 应用程序挂载到主 Vue 应用程序的容器中
- swagger - Swagger 2 相对路径引用没有得到解决
- android - CameraX - 找不到相机设备支持的表面组合 - Id:null。可能试图绑定太多用例
- umbraco - 即使已定义,也无法从对象中获取值
- azure - 使用图形 API 创建 Azure AD B2C 社交帐户