如何加快计算一个字符串中子字符串的速度?

问题描述 投票:0回答:1

我有一个字典子串:count 我还有一个很长的字符串(一千万个字符或更多)。 我需要将字符串中关键子字符串的出现次数输入到字典值中。

def NGFT(normaled_text):
    for tg in NGFT_Table:
        NGFT_Table[tg] = normaled_text.count(tg)

我尝试了简单的方法,但结果发现速度非常慢。 我需要将其速度提高 1-2 个数量级。 (目前运行时间超过一分钟,但用 C# 手工制作的计数器在大约 1 秒内完成了相同的操作。)但它是在字符串生成器的帮助下完成的。对于Python,据我了解,没有字符串生成器。

python string optimization count
1个回答
0
投票

单步遍历字符串,得到每个连续的 3 个字母切片。如果这是字典中的键,则增加计数。

def NGFT(normaled_text):
    for i in range(len(normaled_text) - 2):
        s = normaled_text[i:i+3]
        if s in NGFT_Table:
            NGFT_Table[s] += 1

将字典转换为 B 树,然后递增

btree[normaled_text[i]][normaled_text[i+1]][normaled_text[i+2]]
可能会产生更好的算法。

© www.soinside.com 2019 - 2024. All rights reserved.