ruby - 如何提高这个小 Ruby 函数的性能?
问题描述
我目前正在做一个 Ruby 挑战,并在Terminated due to timeout
一些字符串输入很长(10.000+ 个字符)的测试用例中得到错误。
如何改进我的代码?
红宝石挑战说明
给您一个仅包含字符 A 和 B 的字符串。您的任务是将其更改为没有匹配的相邻字符的字符串。为此,您可以删除字符串中的零个或多个字符。
您的任务是找到所需删除的最少数量。
例如,给定字符串s = AABAAB
,删除A
at 位置0
并3
进行删除s = ABAB
。 2
我的功能
def alternatingCharacters(s)
counter = 0
s.chars.each_with_index { |char, idx| counter += 1 if s.chars[idx + 1] == char }
return counter
end
谢谢!
解决方案
如果您可以使用,则微不足道squeeze
:
str.length - str.squeeze.length
否则,您可以尝试匹配那些A
(or B
) 前面有另一个 A
(or B
) 的正则表达式:
str.enum_for(:scan, /(?<=A)A|(?<=B)B/).count
使用enum_for
避免了中间数组的创建。
推荐阅读
- ios - 可用于 API 请求的编码
- azure - 安装 Azure 备份服务器崩溃并出现错误 4387
- testing - 如何在赛普拉斯中使用 .should 和“closeTo”断言?
- flutter - 谷歌地图在 SliverAppBar 中滞后
- excel - 如何删除包含少于特定字符数的单元格的 Excel 行?
- excel - 如果值为 *true*,如何在 Excel-2010 中使用 **row()** 函数和 **if()** 语句返回行号
- javascript - 运算符 '+' 不能应用于类型 'number[]' :如何更正构建错误?
- python - 在 python 中使用 Selenium 在 Headless chrome 中下载文件时文件未保存
- c# - 如果值为`YES`或`NO`,需要检查条件。对于无效值,它应该抛出一些错误消息
- foreach - 解压缩平面文件并将其存储在数据库中