# Queries for frequencies of characters in substrings

Given a string s and Q number of queries. Each query Q consists of l and r and a character c. Find frequency of character c in substring l to r.

**Examples:**

Input : s = geeksforgeeks 4 0 5 e 2 6 f 4 7 m 0 12 e Output : 2 1 0 4 Substring from 0 to 5 is geeksf. Here e occurs 2 times. Input : s = apple 2 0 4 e 1 2 p Output : 1 2

**Naive Approach:** Run a loop from l to r for Q number of queries. Count occurrence of character and return count. Overall time complexity will be Q * O(|s|).

**Efficient Approach:**We can pre-compute the count for each character. Store count of each character in 2-D array. Return frequency of character from 0 to r minus frequency of character in range 0 to l in O(1). Overall time complexity will be Q * O(1).

## C++

`// CPP program to find occurrence ` `// of character in substring l to r ` `#include <bits/stdc++.h> ` `#define MAX_LEN 1005 ` `#define MAX_CHAR 26 ` ` ` `using` `namespace` `std; ` ` ` `// To store count of all character ` `int` `cnt[MAX_LEN][MAX_CHAR]; ` ` ` `// To pre-procees string from ` `// 0 to size of string ` `void` `preProcess(string s) ` `{ ` ` ` `int` `n = s.length(); ` ` ` ` ` `// Initializing cnt with 0 ` ` ` `memset` `(cnt, 0, ` `sizeof` `(cnt)); ` ` ` ` ` `// Store occurrence of ` ` ` `// character i ` ` ` `for` `(` `int` `i = 0; i < n; i++) ` ` ` `cnt[i][s[i] - ` `'a'` `]++; ` ` ` ` ` `// Store occurrence o ` ` ` `// all character upto i ` ` ` `for` `(` `int` `i = 0; i < n; i++) { ` ` ` `for` `(` `int` `j = 0; j < 26; j++) ` ` ` `cnt[i][j] += cnt[i - 1][j]; ` ` ` `} ` `} ` ` ` `// To return occurrence of ` `// character in range l to r ` `int` `findCharFreq(` `int` `l, ` `int` `r, ` `char` `c) ` `{ ` ` ` `// Return occurrence of character ` ` ` `// from 0 to r minus its ` ` ` `// occurrence from 0 to l ` ` ` `return` `cnt[r] - cnt[l - 1]; ` `} ` ` ` `// Driver program to test above functions ` `int` `main() ` `{ ` ` ` `string s = ` `"geeksforgeeks"` `; ` ` ` `int` `Q = 4; ` ` ` `preProcess(s); ` ` ` ` ` `cout << findCharFreq(0, 5, ` `'e'` `) << endl; ` ` ` `cout << findCharFreq(2, 6, ` `'f'` `) << endl; ` ` ` `cout << findCharFreq(4, 7, ` `'m'` `) << endl; ` ` ` `cout << findCharFreq(0, 12, ` `'e'` `) << endl; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 program to find occurrence

# of character in substring l to r

MAX_LEN, MAX_CHAR = 1005, 26

# To store count of all character

cnt = [[0 for i in range(MAX_CHAR)]

for j in range(MAX_LEN)]

# To pre-procees string from

# 0 to size of string

def preProcess(s):

n = len(s)

# Store occurrence of character i

for i in range(0, n):

cnt[i][ord(s[i]) – ord(‘a’)] += 1

# Store occurrence o

# all character upto i

for i in range(0, n):

for j in range(0, 26):

cnt[i][j] += cnt[i – 1][j]

# To return occurrence of

# character in range l to r

def findCharFreq(l, r, c):

# Return occurrence of character

# from 0 to r minus its

# occurrence from 0 to l

return (cnt[r][ord(c) – 97] –

cnt[l – 1][ord(c) – 97])

# Driver Code

if __name__ == “__main__”:

s = “geeksforgeeks”

Q = 4

preProcess(s)

print(findCharFreq(0, 5, ‘e’))

print(findCharFreq(2, 6, ‘f’))

print(findCharFreq(4, 7, ‘m’))

print(findCharFreq(0, 12, ‘e’))

# This code is contributed by Rituraj Jain

Output:

Output:

2 1 0 4

## Recommended Posts:

- Range Queries for Frequencies of array elements
- XOR of Prime Frequencies of Characters in a String
- Subsequence queries after removing substrings
- Check whether the frequencies of all the characters in a string are prime or not
- Sum and Product of Prime Frequencies of Characters in a String
- Print characters and their frequencies in order of occurrence
- Print characters having odd frequencies in order of occurrence
- Character whose frequency is equal to the sum of frequencies of other characters of the given string
- Print characters and their frequencies in order of occurrence using a LinkedHashMap in Java
- Count substrings with same first and last characters
- Count distinct substrings that contain some characters at most k times
- Count number of substrings with exactly k distinct characters
- Recursive solution to count substrings with same first and last characters
- Find number of substrings of length k whose sum of ASCII value of characters is divisible by k
- Queries for characters in a repeated string

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.