【发布时间】:2017-04-18 08:08:01
【问题描述】:
给定一个未排序的字符串,例如“古戈尔”。我想在范围内找到字符“o”的出现次数:[1, 3)。所以,在这种情况下,答案是 1。
但是,我的方法复杂度为 O(N^2)。我的方法的问题是复制数组需要 O(N) 时间。因此,我一直在寻找另一种更有效的方法。空间复杂度对我来说并不重要。因为我是学习字符串处理算法的,所以这个算法最好自己实现。
任何帮助将不胜感激。
我的方法。
tmp = [0] * 26 # 26 alphabet
occurrences_table = []
tmp[ord(a_string[0])] += 1
occurrences_table.append(tmp)
for i in range(1, len(a_string)):
temp = occurrences_table[i - 1]
temp[ord(a_string[i])] += 1
occurrences_table.append(temp)
【问题讨论】:
-
检查collections.counter。您可以使用slicing 处理特定范围的字符串。
-
@umutto。但这就像我正在学习一些字符串处理算法。所以我想自己实现这个算法。
-
@kevinnnluo - 你真的应该在你原来的问题中提到这种克制。
-
@Christian König。是的,我的错。我已经编辑过了。
标签: python arrays string algorithm