【发布时间】:2020-10-31 16:43:32
【问题描述】:
我使用以下方法尝试了here 提到的 Google Kickstart Round C 倒计时问题:
- 将输入数组转换为空格分隔的字符串
- 将序列
m m-1 m-2 …1派生为另一个以空格分隔的字符串。 - 只需计算第一个字符串中第二个字符串的实例数,因为无论如何序列都应该不重叠,所以这种方法应该有效。
但是,我在实践中得到了WA (Wrong Answer), test set skipped。
这是我在python-3 中的代码。
t = int(input())
for i in range(t):
case_num = i + 1
n, k = [int(x) for x in input().split(" ")]
# The blank spaces around the input str a and substr_k should deal with cases like [3,2,13]
a = " " + " ".join([str(int(x)) for x in input().split(" ")]) + " "
substr_k = " " + " ".join(str(i) for i in reversed(range(1, k+1))) + " "
print("Case #{}: {}".format(case_num, a.count(substr_k)))
请注意,我理解分析中提到的方法显然是一种更好的方法,并且我已经理解它,但是,我仍在试图找出我在上面懒惰编写的代码中哪里出错了。由于我无法访问Google 用于对此代码进行评分的实际案例,您能帮我解决这个问题吗?只是一个返回错误输出的简单案例就可以知道我哪里出错了。
编辑:考虑到@liju 的建议,我更改了代码中的第 6 行,以更好地适应以 0 为前缀的数字的情况
【问题讨论】:
-
当测试用例中以
02,03等零为前缀的数字而不是2,3时,此方法将失败。 -
@Liju 正如您所指出的,我尝试将代码中的第 6 行更改为
a = " " + " ".join([str(int(x)) for x in input().split(" ")]) + " "。不幸的是,结果保持不变