为什么即使使用双端队列而不是列表,我仍然得到 "Terminated due to timeout error"?

Why do I still get "Terminated due to timeout error" even after using deque instead of list?

我编写了以下代码来输出输入中不同单词的数量以及每个不同单词根据它们在输入中的出现次数出现的次数。

我使用了list append and count方法并得到了想要的输出,但是一些测试用例由于超时错误没有执行。

n = int(input())
ar = []
for _ in range(n):
    ar.append(input().rstrip())

def wordOrder(n, ar):    
    w_list =[] #list contains the number of repition of words
    u_list =[] #list eliminates the duplicates while maintaining the same order
    for i in ar:
        if i not in u_list:
            u_list.append(i)
            w_list.append(ar.count(i))
       
    return w_list
    
result = wordOrder(n, ar)
print(len(result))
print(*result, sep=' ')

所以,我尝试使用双端队列而不是列表,认为这可能是由于列表附加方法的 O(n) 的时间复杂度问题。但是即使在使用双端队列之后我也会遇到同样的错误。

请问问题是时间复杂度问题还是其他因素?如果有人可以解释要采用哪种技术来避免超时错误,那就太好了。

示例输入:

4
bcdef
abcdefg
bcde
bcdef

示例输出:

3
2 1 1

这段代码对我来说很好用

from collections import Counter

a=[]

for i in range(int(input())):

      a.append(input())

x = Counter(a)

print(len(x.keys()))

print(*x.values())

虽然仅使用 Counter() 幸运地解决了这个问题,但使用 OrderedDict() 以维护所提供输入的现有顺序是安全的。因此,下面的代码在所有类似情况下应该都能正常工作,并且不会带来任何我想要的“超时错误”。

from collections import Counter, OrderedDict

a=[]

for i in range(int(input())):

      a.append(input())

x = OrderedDict(Counter(a))

print(len(x.keys()))

print(*x.values())