Hackerrank 代码不工作

-7 投票
3 回答
1694 浏览
提问于 2025-04-18 18:06

这个问题可以在这里找到。

我正在用Python编程,下面是我的代码:

num =raw_input()
li=list()
count=150*[0]
ans=0

while num>0:
    li.append(raw_input())
    num=int(num)-1
for i in range (0, len(li)):
    for j in range(0, len(li[i])):
        count.insert (ord(li[i][j]), count[ord(li[i][j])]+1)
for i in range(0, len(count)):
    if count[i]==len(li):
        ans=ans+1
print ans

在运行示例测试时,输出结果是3,而不是2。

我哪里出错了呢?

3 个回答

0

你把 c 当作一个宝石元素来计算。它出现了3次,但并不是在3行不同的地方。因此, count[i]==len(li) 这个条件并不足以判断它是一个宝石元素。

2

网站上说:所需知识:实现,集合:时间复杂度:O(n)

所以使用 set.intersection 会是一个更好的选择:

num = raw_input()

sets  = [set(raw_input()) for x in range(int(num))] ]# make set from each line

print len(set.intersection(*sets)) # find letters that are common in all sets and print the length
2

你的程序有几个问题。

首先,你的插入方法并没有像你想的那样工作。

list.insert(i, x)

这个方法是在指定的位置插入一个项目。第一个参数是插入位置的索引,所以 a.insert(0, x) 是在列表的最前面插入,而 a.insert(len(a), x) 相当于 a.append(x),就是在列表的最后面添加。

其次,你试图统计每个字母出现的次数,而不仅仅是每行中的第一次出现。

这看起来也像是一个用心不够的问题,所以你才会收到负评价。你尝试过什么呢?

这里有一个正确使用你方法的解决方案,但这仍然不是一种很“pythonic”的方式。你有没有考虑过用字典来跟踪这些信息呢?

num = raw_input()
li = list()
count = 150*[0]
seen = 150*[False]
ans = 0

while num > 0:
    li.append(raw_input())
    num = int(num)-1

for i in range(0, len(li)):
    for j in range(0, len(li[i])):
        if (not seen[ord(li[i][j])]):
            count[ord(li[i][j])] += 1
        seen[ord(li[i][j])] = True
    seen = 150*[False]

print count
for i in range(0, len(count)):
    if count[i] == len(li):
        ans = ans+1
        print chr(i)
print ans

这里是用更“pythonic”的方式实现的,难道这不是更容易理解吗?

num = raw_input()
lines = []
seen = set()
count = {}

while num > 0:
    lines.append(raw_input())
    num = int(num)-1

for line in lines:
    for char in line:
        if (char not in seen):
            count[char] = count.get(char, 0) + 1
        seen.add(char)
    seen = set()

print count

print list(count.values()).count(len(lines))

当然,还有更好的方法可以做到这一点。

撰写回答