Kickstart回合2020倒计时问题

时间:2020-08-24 14:04:54

标签: python algorithm

我通过以下方法尝试了here中提到的Google Kickstart回合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开头的数字的情况

1 个答案:

答案 0 :(得分:1)

举一个示例

String =“ abcbabcba”

String.count(“ abcba”)

这将返回1。

但是“ abcba”的数量是2。

您的代码存在相同的问题:

输入:

1

6 3

3 2 1 3 2 1

输出:

1

预期输出:

2

说明:

代码正在使用计数功能查找“ 3 2 1”的计数,这些计数具有返回值1。