📌  相关文章
📜  查询给定索引范围内给定字符的频率(1)

📅  最后修改于: 2023-12-03 15:26:40.353000             🧑  作者: Mango

查询给定索引范围内给定字符的频率

需要查询给定字符串中指定索引范围内给定字符出现的次数。在编写程序时,我们可以使用多种方式来实现此功能。下面将介绍两种基本的算法思路。

方法一:暴力扫描法

此方法即遍历给定范围内的所有字符,逐个进行比较。如果字符匹配,次数加一。

代码实现如下:

def frequency_in_range(s: str, char: str, start: int, end: int) -> int:
    count = 0
    for i in range(start, end):
        if s[i] == char:
            count += 1
    return count
方法二:前缀和法

此方法使用前缀和的思想进行优化。我们首先将给定字符串的字符出现次数预处理出来,避免了在查询时对每个字符进行重复计算。

代码实现如下:

def frequency_in_range(s: str, char: str, start: int, end: int) -> int:
    # 预处理字符出现次数
    n = len(s)
    count = [0] * n
    count[0] = 1 if s[0] == char else 0
    for i in range(1, n):
        count[i] = count[i - 1] + (1 if s[i] == char else 0)
    # 计算指定范围内的字符频率
    return count[end - 1] - count[start - 1] if start > 0 else count[end - 1]

以上便是两种基本算法的实现。需要注意的是,在使用前缀和法时,由于需要对每个字符进行一次预处理,因此该方法适用于多次查询的场景,对于单次查询效率不如暴力扫描法。

以上代码均使用 Python 实现,其他语言的实现也会基本相似。