我需要找到一个字符串中出现的最大字符: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"))
我正在传递输出,即我获得了正确的输出,但未通过测试用例。
答案 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.Counter
和def 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的值。或对输入字符串进行排序并执行相同的操作。