Related Articles

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

• Difficulty Level : Easy
• Last Updated : 28 Apr, 2021

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

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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

## 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 of the above solution is O(n2). We can find count in O(n) using a single traversal of input string. Following are steps.
a) Count the number of 1’s. Let the count of 1’s be m.
b) Return m(m-1)/2
The idea is to count total number of possible pairs of 1’s.

## 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`