# Given a binary string, count number of substrings that start and end with 1.

• Difficulty Level : Easy
• Last Updated : 24 Jun, 2022

Given a binary string, count number of substrings that start and end with 1. For example, if the input string is “00100101”, then there are three substrings “1001”, “100101” and “101”.
Source: Amazon Interview Experience | Set 162
Difficulty Level: Rookie

Recommended Practice

A Simple Solution is to run two loops. Outer loops picks every 1 as starting point and inner loop searches for ending 1 and increments count whenever it finds 1.

Implementation:

## C++

 `// A simple C++ program to count number of``// substrings starting and ending with 1``#include`` ` `using` `namespace` `std;` `int` `countSubStr(``char` `str[])``{``int` `res = 0; ``// Initialize result` `// Pick a starting point``for` `(``int` `i=0; str[i] !=``'\0'``; i++)``{``        ``if` `(str[i] == ``'1'``)``        ``{``            ``// Search for all possible ending point``            ``for` `(``int` `j=i+1; str[j] !=``'\0'``; j++)``            ``if` `(str[j] == ``'1'``)``                ``res++;``        ``}``}``return` `res;``}` `// Driver program to test above function``int` `main()``{``char` `str[] = ``"00100101"``;``cout << countSubStr(str);``return` `0;``}`

## Java

 `// A simple C++ program to count number of``//substrings starting and ending with 1` `class` `CountSubString``{``    ``int` `countSubStr(``char` `str[],``int` `n)``    ``{``        ``int` `res = ``0``;  ``// Initialize result` `        ``// Pick a starting point``        ``for` `(``int` `i = ``0``; i

## Python3

 `# A simple Python 3 program to count number of``# substrings starting and ending with 1` `def` `countSubStr(st, n) :``    ` `    ``# Initialize result``    ``res ``=` `0`  ` ` `   ``# Pick a starting point``    ``for` `i ``in` `range``(``0``, n) :``        ``if` `(st[i] ``=``=` `'1'``) :` `            ``# Search for all possible ending point``            ``for` `j ``in` `range``(i``+``1``, n) :``                ``if` `(st[j] ``=``=` `'1'``) :``                    ``res ``=` `res ``+` `1``        ` `    ``return` `res``    ` ` ` `# Driver program to test above function``st ``=` `"00100101"``;``list``(st)``n``=` `len``(st)``print``(countSubStr(st, n), end``=``"")`  `# This code is contributed``# by Nikita Tiwari.`

## C#

 `// A simple C# program to count number of``// substrings starting and ending with 1``using` `System;` `class` `GFG``{``public` `virtual` `int` `countSubStr(``char``[] str,``                               ``int` `n)``{``    ``int` `res = 0; ``// Initialize result` `    ``// Pick a starting point``    ``for` `(``int` `i = 0; i < n; i++)``    ``{``        ``if` `(str[i] == ``'1'``)``        ``{``            ``// Search for all possible``            ``// ending point``            ``for` `(``int` `j = i + 1; j < n; j++)``            ``{``                ``if` `(str[j] == ``'1'``)``                ``{``                    ``res++;``                ``}``            ``}``        ``}``    ``}``    ``return` `res;``}` `// Driver Code``public` `static` `void` `Main(``string``[] args)``{``    ``GFG count = ``new` `GFG();``    ``string` `s = ``"00100101"``;``    ``char``[] str = s.ToCharArray();``    ``int` `n = str.Length;``    ``Console.WriteLine(count.countSubStr(str,n));``}``}` `// This code is contributed by Shrikant13`

## PHP

 ``

## Javascript

 ``

Output

`3`

Time Complexity: O(n2)
Auxiliary Space: O(1)

We can find count in O(n) using a single traversal of input string. Following are steps:

1. Count the number of 1’s. Let the count of 1’s be m.
2. Return m(m-1)/2

The idea is to count total number of possible pairs of 1’s.

Implementation:

## C++

 `// A O(n) C++ program to count number of``// substrings starting and ending with 1``#include` `using` `namespace` `std;` `int` `countSubStr(``char` `str[])``{``   ``int` `m = 0; ``// Count of 1's in input string` `   ``// Traverse input string and count of 1's in it``   ``for` `(``int` `i=0; str[i] !=``'\0'``; i++)``   ``{``        ``if` `(str[i] == ``'1'``)``           ``m++;``   ``}` `   ``// Return count of possible pairs among m 1's``   ``return` `m*(m-1)/2;``}` `// Driver program to test above function``int` `main()``{``  ``char` `str[] = ``"00100101"``;``  ``cout << countSubStr(str);``  ``return` `0;``}`

## Java

 `// A O(n) C++ program to count number of substrings``//starting and ending with 1` `class` `CountSubString``{``    ``int` `countSubStr(``char` `str[], ``int` `n)``    ``{``        ``int` `m = ``0``; ``// Count of 1's in input string` `        ``// Traverse input string and count of 1's in it``        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{``            ``if` `(str[i] == ``'1'``)``                ``m++;``        ``}` `        ``// Return count of possible pairs among m 1's``        ``return` `m * (m - ``1``) / ``2``;``    ``}` `    ``// Driver program to test the above function``    ``public` `static` `void` `main(String[] args)``    ``{``        ``CountSubString count = ``new` `CountSubString();``        ``String string = ``"00100101"``;``        ``char` `str[] = string.toCharArray();``        ``int` `n = str.length;``        ``System.out.println(count.countSubStr(str, n));``    ``}``}`

## Python3

 `# A Python3 program to count number of``# substrings starting and ending with 1` `def` `countSubStr(st, n) :` `    ``# Count of 1's in input string``    ``m ``=` `0` ` ` `    ``# Traverse input string and``    ``# count of 1's in it``    ``for` `i ``in` `range``(``0``, n) :``        ``if` `(st[i] ``=``=` `'1'``) :``            ``m ``=` `m ``+` `1``        ` `    ``# Return count of possible``    ``# pairs among m 1's``    ``return` `m ``*` `(m ``-` `1``) ``/``/` `2``   ` ` ` `# Driver program to test above function``st ``=` `"00100101"``;``list``(st)``n``=` `len``(st)``print``(countSubStr(st, n), end``=``"")`  `# This code is contributed``# by Nikita Tiwari.`

## C#

 `// A O(n) C# program to count``// number of substrings starting``// and ending with 1``using` `System;` `class` `GFG``{``int` `countSubStr(``char` `[]str, ``int` `n)``{``    ``int` `m = 0; ``// Count of 1's in``               ``// input string` `    ``// Traverse input string and``    ``// count of 1's in it``    ``for` `(``int` `i = 0; i < n; i++)``    ``{``        ``if` `(str[i] == ``'1'``)``            ``m++;``    ``}` `    ``// Return count of possible``    ``// pairs among m 1's``    ``return` `m * (m - 1) / 2;``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``GFG count = ``new` `GFG();``    ``String strings = ``"00100101"``;``    ``char` `[]str = strings.ToCharArray();``    ``int` `n = str.Length;``    ``Console.Write(count.countSubStr(str, n));``}``}` `// This code is contributed by princiraj`

## PHP

 ``

## Javascript

 ``

Output

`3`

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

My Personal Notes arrow_drop_up