📅  最后修改于: 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 实现,其他语言的实现也会基本相似。