📌  相关文章
📜  查询以查找字符串S 中 L 到 R 范围内重复字符的总数(1)

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

查询字符串S中L到R范围内重复字符的总数

有时在处理字符串操作的时候,需要查询一个字符串中的某个子串中有多少个字符是重复的,尤其是在做字符串匹配、去重、计算某个字符在字符串中出现的次数等场景时,该功能非常有用。下面我们就来介绍一下如何查询一个字符串S中L到R范围内重复字符的总数。

思路

直接暴力查找过程复杂度较高,可以借助哈希表来减少查找的次数。具体思路如下:

  1. 首先,我们遍历字符串S,并把每个字符和这个字符出现的次数记录在哈希表中;
  2. 然后,统计L到R范围内的字符在哈希表中出现的次数,并求和,即可得到重复字符的总数。
代码实现
def count_repeat_chars(S: str, L: int, R: int) -> int:
    """
    查询字符串S中L到R范围内重复字符的总数
    :param S: 原始字符串
    :param L: 查询范围下界
    :param R: 查询范围上界
    :return: 重复字符的总数
    """
    if not S or L >= R:
        return 0

    # 统计每个字符出现的次数
    char_count = {}
    for i in range(len(S)):
        if S[i] not in char_count:
            char_count[S[i]] = 1
        else:
            char_count[S[i]] += 1

    # 统计L到R范围的重复字符的总数
    repeat_count = 0
    for i in range(L, R + 1):
        if S[i] in char_count and char_count[S[i]] > 1:
            repeat_count += 1
            char_count[S[i]] -= 1

    return repeat_count
测试样例
assert count_repeat_chars("hello world", 3, 8) == 2
assert count_repeat_chars("leetcode", 2, 6) == 2
assert count_repeat_chars("abba", 0, 3) == 2