计算字符串中某个字符出现的有效方法?

时间:2019-07-13 09:00:54

标签: python python-3.x string

以下是比赛(已结束)中与问题相关的链接:https://justpaste.it/7g5bz

我尝试过这种方法。

p = []
n = int(input())
s = input()
q = int(input())
for _ in range(q):
  p.append(int(input()))
for pth in p:
  print(s.count(s[pth-1],0,pth-1))

测试用例运行良好,但是当我提交此解决方案时。它显示了超过时间限制。 还有其他更优化的方法吗?

1 个答案:

答案 0 :(得分:1)

由于您正在循环调用count()而超时:

我首先要对输入字符串进行预处理:创建一个新列表,其中包含该字符串中字符出现的次数。这样,查询某个索引处的字符出现次数将变为O(1):

s = 'abacsddaa'

from itertools import count
from collections import defaultdict

d = defaultdict(count)
new_s = [next(d[ch]) for ch in s] # new_s is [0, 0, 1, 0, 0, 0, 1, 2, 3]

count_occurences = lambda idx: new_s[idx-1] 


print(count_occurences(9))
print(count_occurences(3))

打印:

3
1