gpt4 book ai didi

python - 如何有效地计算给定字符在字符串的特定范围内出现的次数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:33 26 4
gpt4 key购买 nike

给定一个未排序的字符串,例如“咕咕”。我想查找范围内字符“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)

最佳答案

因为您不想使用 counter并且想自己实现它,你的代码可以通过使用字典来整理和加速一点。

a_string = "googol"
my_counter = {}
for c in a_string[:2]:
my_counter[c] = my_counter.get(c, 0) + 1

这会给你:

{'o': 1, 'g': 1}

进一步解释 a_string[:2] 获取字符串中索引 2 之前的字符 ('google'[:2] = 'go') 和 for c in a_string[:2]: 循环这两个字符。

在下一行中,my_counter.get(c, 0) + 1 尝试获取键“c”(字符串中的单个字符)的字典值,如果它存在的话返回它的值,如果不是则返回 0,并且无论哪种方式都将增加的值添加回字典。


编辑:

由于 dictionary.get() 的复杂度是常数,因此由于 for 循环,复杂度应该仅为 O(n)。

我已经对其进行了测量,对于像您这样的非常小的字符串,此方法比 Collections.Counter 快 8-10 倍,但对于非常大的字符串,它会慢 2-3 倍。

关于python - 如何有效地计算给定字符在字符串的特定范围内出现的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com