修改字符串长度函数输入时,黑客等级编译器显示错误

时间:2018-06-29 13:24:04

标签: python string

我的代码在 hacker rank 编译器窗口中针对某个问题的15个测试输入中的11个产生了令人满意的结果。但是,当我对代码进行细微更改时,所有测试输入均按OK运行。

这是我先前显示错误的代码片段(由于超时而终止)。

for ind, letter in enumerate(string):
    if letter in vowels:
        kevin += len(string[ind:])
    else:
        stuart += len(string[ind:])

当我如下更改上面的代码时,所有输入均成功运行。

for ind, letter in enumerate(string):
    if letter in vowels:
        kevin += len(string) - ind
    else:
        stuart += len(string) - ind

这两个代码不相等吗?

1 个答案:

答案 0 :(得分:2)

除了两个方面,这些代码段是完全等效的:

  1. 第二个更优化-没有string的多个子集创建。
  2. 第二种方法适用于任何collection-可以处理字典,列表,元组,字符串以及同时实现__len____iter__的任何方法。

在您添加了错误(说这是超时错误)后,我倾向于问题1(即字符串创建)。

如果要创建一个很长的字符串的子集,则对每次迭代执行以下操作:

  1. 分配n-1个字节的空间。 (慢速
  2. 将所有空间设置为零(内部完成,可能使用calloc()
  3. 将n-1个字节从原始字符串复制到该新空间。 (
  4. 找出长度(一个非常快速的操作
  5. 取消分配空间。 (也快

对于长字符串,整个序列可能是繁重的操作,尤其是对于每次迭代而言。

第二个算法做到这一点:

  1. 获取长度(快速操作
  2. 减去整数(快速操作
  3. ???
  4. 利润。