问题是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。
我哪里错了?
答案 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)
不是宝石元素的充分标准。