首页 > 解决方案 > 如何提高这个小 Ruby 函数的性能?

问题描述

我目前正在做一个 Ruby 挑战,并在Terminated due to timeout 一些字符串输入很长(10.000+ 个字符)的测试用例中得到错误。

如何改进我的代码?

红宝石挑战说明

给您一个仅包含字符 A 和 B 的字符串。您的任务是将其更改为没有匹配的相邻字符的字符串。为此,您可以删除字符串中的零个或多个字符。

您的任务是找到所需删除的最少数量。

例如,给定字符串s = AABAAB,删除Aat 位置03进行删除s = ABAB2

我的功能

def alternatingCharacters(s)
    counter = 0
    s.chars.each_with_index { |char, idx| counter += 1 if s.chars[idx + 1] == char }
    return counter
end

谢谢!

标签: ruby

解决方案


如果您可以使用,则微不足道squeeze

str.length - str.squeeze.length

否则,您可以尝试匹配那些A(or B) 前面有另一个 A(or B) 的正则表达式:

str.enum_for(:scan, /(?<=A)A|(?<=B)B/).count

使用enum_for避免了中间数组的创建。


推荐阅读