【问题标题】:Codechef: Piece of CakeCodechef:小菜一碟
【发布时间】:2021-08-04 13:51:45
【问题描述】:

给你一个字符串。您的任务是确定字符串中某个字符出现的次数是否等于字符串中其他字符出现次数的总和。

输入: 输入的第一行包含一个整数 T,表示测试用例的数量。接下来的 T 行中的每一行都包含一个由小写拉丁字母组成的字符串 S。

输出: 对于每个测试用例,如果字符串满足上述条件,则输出包含“YES”的单行,否则输出“NO”。

约束 1≤T≤1000 1≤S的长度≤50 子任务 子任务#1[28 分]:S 包含不超过 2 个不同的字母。 子任务#2[72分]:无附加条件

示例 输入: 4 出租车

zqzqq

abc

kklkwwww

输出: 是的

是的

没有

是的

我的代码:

for i in range(int(input())):
s = input()
d = {}
st = set(s)
sm = 0
for char in st:
    d[char] = s.count(char)
for value in d.values():
    sm += value
if sm % 2 == 0:
    print('YES')
else:
    print('NO')

由于我的算法通过了给定的测试用例,但我仍然得到错误的答案。谁能告诉我为什么?

【问题讨论】:

  • 您可以使用 count、len 并为每个字符串创建一个列表,其中每个索引都是一个字母,从而大大简化此操作

标签: python-3.x string


【解决方案1】:

在您的解决方案中,变量 sm 将存储给定字符串中的字符数。但是,根据问题,我认为假设如果字符串中的字符数是偶数,则字符串中必然有一个字符的频率等于其他字符的频率之和是错误的。 以字符串“abcd”为例。根据您的代码,此字符串将给出“是”,但它不应该。

解决问题的方法- 不是检查所有字符的频率之和是否为偶数,而是检查字符串中是否存在频率等于字符串长度一半的字符。

我稍微修改了您的代码。这适用于所有测试用例。

for i in range(int(input())):
    s = input()
    d = {}
    st = set(s)
    sm = 0
    for char in st:
        d[char] = s.count(char)
    flag=0
    for value in d.values():
        if value*2==len(s):
            flag=1
            break
    if flag==1:
        print('YES')
    else:
        print('NO')

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2013-07-30
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多