我之前错误地要求str.count,当我真正的意思是str.length。感谢回复者回复我
这是恒定时间操作还是线性时间?根据{{3}},我知道在Java中它是常数时间而C是线性时间但不确定Ruby的情况是什么。
答案 0 :(得分:2)
String#count
计算字符串中(一组)子串的出现次数。为了做到这一点,必须将每个字符与谓词集进行比较,没有别的办法。
它不可能比O(n)快。平凡的实现是O(n),所以为了使它慢于而不是O(n),你必须是额外的愚蠢并做额外的工作。因此,因为它不能比O(n)快,并且我们可以假设没有人会愚蠢或恶意到故意让它比O(n)慢,我们可以安全地得出结论它是O(n)。
然而,这只是一个结论。这不是保证。 Ruby语言规范不提供性能保证。但你可以非常肯定,一个不是O(n)的Ruby实现会受到嘲笑,而且根本不会被使用而且会死掉。
答案 1 :(得分:1)
复杂性为O(n + m)
其中n
是字符串的大小,m
是字符集参数的数量。
O(m)
用于从参数O(n) * O(1)
用于比较输入字符串和查找表/ hash n
或m
可能是主导因素。如果您的意思是String#length
,那么它是O(1)