Count of substrings of a binary string containing K ones in C++


We are given a string of binary numbers i.e. combination of 0’s and 1’s and an integer value k and the task is to calculate the count of substrings formed with the given binary string having given k 1’s.

Input − string str = ‘10000100000’, k = 2

Output − Count of substrings of a binary string containing K ones are − 6

Explanation − Substrings that can be formed from the given string are 1, 10, 100, 1000, 10000, 010, 100001, 10001, 1001, 101, 11, 1000010. So there are 6 substrings having k number of 1’s i.e. exactly 2 ones.

Input − string str = ‘10000100000’, k = 3

Output − Count of substrings of a binary string containing K ones are − 0

Explanation − We are given with an integer value of k as 3 and if we check our string containing binary numbers, it has only 2 ones. So there is no possibility of substring having given k number of ones.

The approach used in the below program is as follows

  • Input a string of binary numbers having combinations of 0’s and 1’s and an integer variable k.

  • Calculate the length of the string using length() function and pass the data to the function for further processing.

  • Declare a temporary variable count and total as 0 for storing the substrings with k ones.

  • Declare an array to store the frequency of ones of size as length of string plus one and initialise it with 0 and set the first element of array as 1.

  • Start loop FOR from 0 till the length of an array

  • Inside the loop, set total as total + str[i] - ‘0’. Check IF total >= k then set count as count + arr[total-k].

  • Return count

  • Print the result.

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int sub_k_ones(string str, int length, int k){
   int count = 0;
   int total_1 = 0;
   int arr_fre[length + 1] = {0};
   arr_fre[0] = 1;
   for (int i = 0; i < length; i++){
      total_1 = total_1 + (str[i] - '0');
      if (total_1 >= k){
         count = count + arr_fre[total_1 - k];
      }
      arr_fre[total_1]++;
   }
   return count;
}
int main(){
   string str = "10000100000";
   int length = str.length();
   int k = 2;
   cout<<"Count of substrings of a binary string containing K ones are: "<<sub_k_ones(str, length, k) << endl;
   return 0;
}

Output

If we run the above code it will generate the following output −

Count of substrings of a binary string containing K ones are: 6

Updated on: 02-Dec-2020

391 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements