# Count number of indices such that s[i] = s[i+1] : Range queries

• Last Updated : 22 Jun, 2022

Given a string str. Now for every query consisting of two integer L and R, the task is to find the number of indices such that str[i] = str[i+1] and L â‰¤ i, i+1 â‰¤ R.
Examples:

Input: str = “ggggggggggg”, query[] = {{1, 2}, {1, 5}}
Output: 1 4
The answer is 1 for first query and 4 for second query.
The condition is true for all indices except the last one in each query.
Input: str = “geeg”, query[] = {{0, 3}}
Output:
The condition is true only for i = 1.

Approach: Create a prefix array pref such that pref[i] holds the count of all the indices from 1 to i-1 such that str[i] = str[i+1]. Now for every query (L, R) the result will be pref[r] – pref[l].
Below is the implementation of the above approach:

## C++

 `// C++ program to find substring with ``#include ``using` `namespace` `std;` `// Function to create prefix array``void` `preCompute(``int` `n, string s, ``int` `pref[])``{``    ``pref[0] = 0;``    ``for` `(``int` `i = 1; i < n; i++) {``        ``pref[i] = pref[i - 1];``        ``if` `(s[i - 1] == s[i])``            ``pref[i]++;``    ``}``}` `// Function to return the result of the query``int` `query(``int` `pref[], ``int` `l, ``int` `r)``{``    ``return` `pref[r] - pref[l];``}` `// Driver Code``int` `main()``{``    ``string s = ``"ggggggg"``;``    ``int` `n = s.length();` `    ``int` `pref[n];``    ``preCompute(n, s, pref);` `    ``// Query 1``    ``int` `l = 1;``    ``int` `r = 2;``    ``cout << query(pref, l, r) << endl;` `    ``// Query 2``    ``l = 1;``    ``r = 5;``    ``cout << query(pref, l, r) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to find substring with` `import` `java.io.*;` `class` `GFG {` `// Function to create prefix array``static` `void` `preCompute(``int` `n, String s, ``int` `pref[])``{``    ``pref[``0``] = ``0``;``    ``for` `(``int` `i = ``1``; i < n; i++) {``        ``pref[i] = pref[i - ``1``];``        ``if` `(s.charAt(i - ``1``)== s.charAt(i))``            ``pref[i]++;``    ``}``}` `// Function to return the result of the query``static` `int` `query(``int` `pref[], ``int` `l, ``int` `r)``{``    ``return` `pref[r] - pref[l];``}` `// Driver Code` `    ``public` `static` `void` `main (String[] args) {``    ``String s = ``"ggggggg"``;``    ``int` `n = s.length();` `    ``int` `pref[] = ``new` `int``[n];``    ``preCompute(n, s, pref);` `    ``// Query 1``    ``int` `l = ``1``;``    ``int` `r = ``2``;``    ``System.out.println( query(pref, l, r));` `    ``// Query 2``    ``l = ``1``;``    ``r = ``5``;``    ``System.out.println(query(pref, l, r));``    ``}``}``// This code is contributed by inder_verma..`

## Python3

 `# Python3 program for the given approach` `# Function to create prefix array``def` `preCompute(n, s, pref):`` ` `    ``for` `i ``in` `range``(``1``,n): ``        ``pref[i] ``=` `pref[i ``-` `1``]``        ``if` `s[i ``-` `1``] ``=``=` `s[i]:``            ``pref[i] ``+``=` `1``  ` `# Function to return the result of the query``def` `query(pref, l, r):`` ` `    ``return` `pref[r] ``-` `pref[l]``  ` `if` `__name__ ``=``=` `"__main__"``:` `    ``s ``=` `"ggggggg"``    ``n ``=` `len``(s)``  ` `    ``pref ``=` `[``0``] ``*` `n``    ``preCompute(n, s, pref)``  ` `    ``# Query 1``    ``l ``=` `1``    ``r ``=` `2``    ``print``(query(pref, l, r))``  ` `    ``# Query 2``    ``l ``=` `1``    ``r ``=` `5``    ``print``(query(pref, l, r))``    ` `# This code is contributed by Rituraj Jain`

## C#

 `// C# program to find substring with` `using` `System;` `class` `GFG {`  `// Function to create prefix array``static` `void` `preCompute(``int` `n, ``string` `s, ``int` `[]pref)``{``    ``pref[0] = 0;``    ``for` `(``int` `i = 1; i < n; i++) {``        ``pref[i] = pref[i - 1];``        ``if` `(s[i - 1]== s[i])``            ``pref[i]++;``    ``}``}` `// Function to return the result of the query``static` `int` `query(``int` `[]pref, ``int` `l, ``int` `r)``{``    ``return` `pref[r] - pref[l];``}` `// Driver Code` `    ``public` `static` `void` `Main () {``    ``string` `s = ``"ggggggg"``;``    ``int` `n = s.Length;` `    ``int` `[]pref = ``new` `int``[n];``    ``preCompute(n, s, pref);` `    ``// Query 1``    ``int` `l = 1;``    ``int` `r = 2;``    ``Console.WriteLine( query(pref, l, r));` `    ``// Query 2``    ``l = 1;``    ``r = 5;``    ``Console.WriteLine(query(pref, l, r));``    ``}``}``// This code is contributed by inder_verma..`

## PHP

 ``

## Javascript

 ``

Output:

```1
4```

Time Complexity: O(n+k) where n is the size of the string and k is the number of queries.
Auxiliary Space: O(n)

My Personal Notes arrow_drop_up