Hackerrank Code无效

时间:2014-08-21 18:36:13

标签: python

问题是here

我在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 :(得分: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))

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

答案 1 :(得分: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 :(得分:0)

您将c计为宝石元素。它发生3次,但不是3次不同。因此,count[i]==len(li)不是宝石元素的充分标准。