我无法弄清楚我在这里失败的测试用例

时间:2019-09-24 14:23:25

标签: python python-3.x

我需要找到一个字符串中出现的最大字符:a-z。它是26个字符长,即26种不同的类型。

即使输出正确,我仍然失败。我在做什么错了?

以下条件:

注意:如果有多个最大等值的类型,则将考虑使用ASCII值较小的类型。

输入格式 输入的第一行包括测试用例的数量T。

每个测试用例的第二行包含一个字符串,代表每个单独字符的类型。

约束

1 <= T <= 10

1 <= |字符串| <= 100000

输出格式

对于每个测试用例,请在单独的行中打印所需的输出。

示例测试用例1

输入

2

gqtrawq

fnaxtyyzz

输出

q

y

说明

测试用例1:最大出现2个q,而其余的全部单独出现。

测试案例2:。有2种y和2种z类型。由于最大值相同,因此将具有较小Ascii值的类型视为输出。因此,y是正确的类型。

def testcase(str1):

  ASCII_SIZE = 256

  ctr = [0] * ASCII_SIZE

  max = -1

  ch = ''

  for i in str1:

    ctr[ord(i)]+=1;


  for i in str1:

    if max < ctr[ord(i)]:

      max = ctr[ord(i)]

      ch = i

  return ch

print(testcase("gqtrawq"))

print(testcase("fnaxtyyzz"))

我正在传递输出,即我获得了正确的输出,但未通过测试用例。

2 个答案:

答案 0 :(得分:1)

注意笔记:

  

注意:如果有多个最大等值的类型,则将考虑使用ASCII值较小的类型。

但是使用您的代码,您将返回计数最高的字符,该字符首先出现在字符串中。如果是平局,则在比较中考虑角色本身:

for i in str1:
  if max < ctr[ord(i)] or max == ctr[ord(i)] and i < ch:
    max = ctr[ord(i)]
    ch = i

或更短(但不一定更清晰)比较(count, char)的元组:

  if (max, i) < (ctr[ord(i)], ch):

(请注意,这是在比较(old_cnt, new_char) < (new_cnt, old_chr)!)

或者,您也可以按排序顺序迭代字符串中的字符:

for i in sorted(str1):
  if max < ctr[ord(i)]:
    ...

话虽如此,您可以通过直接对字符(而不是ord(使用dict而不是list)进行计数,并使用{{1 }}函数和适当的max函数以获取最常见的字符。

key

可以同时使用collections.Counterdef testcase(str1): ctr = {c: 0 for c in str1} for c in str1: ctr[c] += 1 return max(sorted(set(str1)), key=ctr.get) ,但是有趣之处在哪里?

答案 1 :(得分:0)

这应该是什么输出-print(testcase(“ fanaxtyfzyz”))?

IMO,输出应为“ a”,但程序写为“ f”。 原因是您要遍历输入字符串的字符,

for i in str1: #Iterating through the values 'f','a','n','a','x','t',...
               #first count of 'f' is considered. 
               #count of 'f' occurs first, count of 'a' not considered.
if max < ctr[ord(i)]: 

  max = ctr[ord(i)]

  ch = i

相反,您应该遍历ctr的值。或对输入字符串进行排序并执行相同的操作。