Open In App

Count of substrings of a Binary string containing only 1s

Last Updated : 16 Nov, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a binary string of length N, we need to find out how many substrings of this string contain only 1s.

Examples: 

Input: S = "0110111"
Output: 9
Explanation:
There are 9 substring with only 1's characters. 
"1" comes 5 times. 
"11" comes 3 times. 
"111" comes 1 time.

Input: S = "000"
Output: 0

The_Approach:   the approach simple we will going to traverse over array and count one follow the steps.

  •    initialize total=0 and currone=0.
  •    then traverse over string and count ones in string till zero occur.
  •    if zero occur then just add the number of possible substring that are possible from currone as.
  •    total+=(currone*(currone+1))/2. and after addition currone=0.
  •    do this till n-1.

Below is the implementation of the above approach:

C++
#include <bits/stdc++.h>
#include <iostream>
using namespace std;

int main()
{
    // Given string.
    string s = "0110111";
    // to avoid int overflow.
    int mod = 1000000007;
    long long int total = 0;
    long long int one = 0;
    // traverse over string.
    for (int i = 0; i < s.size(); i++) {
        // count the ones.
        if (s[i] == '1') {
            ++one;
        }
        else {
            long long x = (one * (one + 1)) % mod;
            total += x / 2;
            one = 0;
        }
    }
    // count if reamin.
    if (one != 0)
        total += (long long)(one * (one + 1)) / 2;
    // printing the output.
    cout << total << endl;
    return 0;
}
Java
import java.util.*;

public class GFG {
    public static void main(String[] args) {
        // Given string.
        String s = "0110111";
        // To avoid integer overflow.
        long mod = 1000000007;
        long total = 0;
        long one = 0;
        
        // Traverse over the string.
        for (int i = 0; i < s.length(); i++) {
            // Count the ones.
            if (s.charAt(i) == '1') {
                one++;
            } else {
                long x = (one * (one + 1)) % mod;
                total += x / 2;
                one = 0;
            }
        }
        
        // Count if remaining ones.
        if (one != 0) {
            total += (long) (one * (one + 1)) / 2;
        }
        
        // Printing the output.
        System.out.println(total);
    }
}
Python3
# Given string
s = "0110111"

# to avoid int overflow
mod = 1000000007
total = 0
one = 0

# traverse over string
for i in range(len(s)):
  
    # count the ones
    if s[i] == '1':
        one += 1
    else:
        x = (one * (one + 1)) % mod
        total += x // 2
        one = 0
        
# count if remain
if one != 0:
    total += (one * (one + 1)) // 2
    
# printing the output
print(total)
C#
using System;

class Program {
  static void Main()
  {
    // Given string.
    string s = "0110111";

    // to avoid int overflow.
    int mod = 1000000007;
    long total = 0;
    long one = 0;

    // traverse over string.
    for (int i = 0; i < s.Length; i++) 
    {

      // count the ones.
      if (s[i] == '1') {
        ++one;
      }
      else {
        long x = (one * (one + 1)) % mod;
        total += x / 2;
        one = 0;
      }
    }

    // count if reamin.
    if (one != 0)
      total += (long)(one * (one + 1)) / 2;

    // printing the output.
    Console.WriteLine(total);
  }
}

// This code is contributed by user_dtewbxkn77n
JavaScript
// Given string.
let s = "0110111";
// to avoid int overflow.
let mod = 1000000007;
let total = 0;
let one = 0;
// traverse over string.
for (let i = 0; i < s.length; i++) {
    // count the ones.
    if (s[i] == '1') {
        ++one;
    }
    else {
        let x = (one * (one + 1)) % mod;
        total += x / 2;
        one = 0;
    }
}
// count if remain.
if (one != 0)
    total += (one * (one + 1)) / 2;
// printing the output.
console.log(total);

Output
9

Complexity Analysis:

Time Complexity : O(n).

Auxiliary Space : O(1).


Approach: The idea is to traverse the binary string and count the consecutive ones in the string. Below is the illustration of the approach:

  • Traverse the given binary string from index 0 to length - 1
  • Count the number of consecutive "1" till index i.
  • For each new character str[i], there will be more substring with all character's as "1"

Below is the implementation of the above approach:

C++
// C++ implementation to find 
// count of substring containing 
// only ones 

#include <bits/stdc++.h> 
using namespace std; 

// Function to find the total number 
// of substring having only ones 
int countOfSubstringWithOnlyOnes(string s) 
{ 
    int res = 0, count = 0; 
    for (int i = 0; i < s.length(); i++) { 
    count = s[i] == '1' ? count + 1 : 0; 
    res = (res + count); 
    } 
    return res; 
} 

// Driver Code 
int main() 
{ 
    string s = "0110111"; 
    cout << countOfSubstringWithOnlyOnes(s) 
        << endl; 
    return 0; 
} 
Java
// Java implementation to find 
// count of substring containing 
// only ones 
class GFG{ 
    
// Function to find the total number 
// of substring having only ones 
static int countOfSubstringWithOnlyOnes(String s) 
{ 
    int res = 0, count = 0; 
    for(int i = 0; i < s.length(); i++) 
    { 
        count = s.charAt(i) == '1' ? count + 1 : 0; 
        res = (res + count); 
    } 
    return res; 
} 

// Driver code 
public static void main(String[] args) 
{ 
    String s = "0110111"; 
    
    System.out.println(countOfSubstringWithOnlyOnes(s)); 
} 
} 

// This code is contributed by dewantipandeydp 
Python3
# Python3 implementation to find 
# count of substring containing 
# only ones 

# Function to find the total number 
# of substring having only ones 
def countOfSubstringWithOnlyOnes(s): 

    count = 0
    res = 0
    
    for i in range(0,len(s)): 
        if s[i] == '1': 
            count = count + 1
        else: 
            count = 0; 
            
        res = res + count 
            
    return res 

# Driver Code 
s = "0110111"
print(countOfSubstringWithOnlyOnes(s)) 

# This code is contributed by jojo9911 
C#
// C# implementation to find count
// of substring containing only ones 
using System;

class GFG{ 
    
// Function to find the total number 
// of substring having only ones 
static int countOfSubstringWithOnlyOnes(string s) 
{ 
    int res = 0, count = 0; 
    
    for(int i = 0; i < s.Length; i++) 
    { 
        count = s[i] == '1' ? count + 1 : 0; 
        res = (res + count); 
    } 
    return res; 
} 

// Driver code 
public static void Main(string[] args) 
{ 
    string s = "0110111"; 
    
    Console.Write(countOfSubstringWithOnlyOnes(s)); 
} 
} 

// This code is contributed by rutvik_56
JavaScript
<script>

// Javascript implementation to find 
// count of substring containing 
// only ones 

// Function to find the total number 
// of substring having only ones 
function countOfSubstringWithOnlyOnes(s) 
{ 
    var res = 0, count = 0; 
    for (var i = 0; i < s.length; i++) { 
    count = s[i] == '1' ? count + 1 : 0; 
    res = (res + count); 
    } 
    return res; 
} 

// Driver Code 
var s = "0110111"; 
document.write( countOfSubstringWithOnlyOnes(s));

</script>

Output
9

Time Complexity: O(n), where n is the size of the given string
Auxiliary Space: O(1)


Next Article

Similar Reads