 Open in App
Not now

# Position of leftmost set bit in given binary string where all 1s appear at end

• Last Updated : 15 Feb, 2022

Given a binary string S of length N, such that all 1s appear on the right. The task is to return the index of the first set bit found from the left side else return -1.

Examples:

Input: s = 00011, N = 5
Output: 3
Explanation: The first set bit from the left side is at index 3.

Input: s = 0000, N = 4
Output: -1

Approach: This problem can be solved using Binary Search.

• Apply Binary search in the range [1, N] to find the first set bit as follows:
• Update mid as (l+r)/2
• If s[mid] is set bit, update ans as mid and r as mid-1
• else update l as mid + 1
• Return the last stored value in ans.

Below is the implementation of the above approach:

## C++

 `// C++ Program to find Position` `// Of leftmost set bit` `#include ` `using` `namespace` `std;`   `// Function to find` `// A bit is set or not` `bool` `isSetBit(string& s, ``int` `i)` `{` `    ``return` `s[i] == ``'1'``;` `}`   `// Function to find` `// First set bit` `int` `firstSetBit(string& s, ``int` `n)` `{` `    ``long` `l = 0, r = n, m, ans = -1;`   `    ``// Applying binary search` `    ``while` `(l <= r) {`   `        ``m = (l + r) / 2;` `        ``if` `(isSetBit(s, m)) {`   `            ``// store the current` `            ``// state of m in ans` `            ``ans = m;` `            ``r = m - 1;` `        ``}` `        ``else` `{` `            ``l = m + 1;` `        ``}` `    ``}`   `    ``// Returning the position` `    ``// of first set bit` `    ``return` `ans;` `}`   `// Driver code` `int` `main()` `{`   `    ``string s = ``"111"``;` `    ``int` `n = s.length();` `    ``cout << firstSetBit(s, n);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `class` `GFG` `{`   `  ``// Function to find` `  ``// A bit is set or not` `  ``static` `boolean` `isSetBit(String s, ``int` `i)` `  ``{` `    ``return` `s.charAt(i) == ``'1'` `? ``true` `: ``false``;` `  ``}`   `  ``// Function to find` `  ``// First set bit` `  ``static` `int` `firstSetBit(String s, ``int` `n)` `  ``{` `    ``int` `l = ``0``, r = n, m, ans = -``1``;`   `    ``// Applying binary search` `    ``while` `(l <= r) {`   `      ``m = (l + r) / ``2``;` `      ``if` `(isSetBit(s, m)) {`   `        ``// store the current` `        ``// state of m in ans` `        ``ans = m;` `        ``r = m - ``1``;` `      ``}` `      ``else` `{` `        ``l = m + ``1``;` `      ``}` `    ``}`   `    ``// Returning the position` `    ``// of first set bit` `    ``return` `ans;` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `main(String args[])` `  ``{` `    ``String s = ``"111"``;` `    ``int` `n = s.length();` `    ``System.out.print(firstSetBit(s, n));` `  ``}` `}`   `// This code is contributed by gfgking`

## C#

 `// C# program for the above approach` `using` `System;` `using` `System.Collections.Generic;`   `class` `GFG` `{`   `  ``// Function to find` `  ``// A bit is set or not` `  ``static` `bool` `isSetBit(``string` `s, ``int` `i)` `  ``{` `    ``return` `s[i] == ``'1'``;` `  ``}`   `  ``// Function to find` `  ``// First set bit` `  ``static` `int` `firstSetBit(``string` `s, ``int` `n)` `  ``{` `    ``int` `l = 0, r = n, m, ans = -1;`   `    ``// Applying binary search` `    ``while` `(l <= r) {`   `      ``m = (l + r) / 2;` `      ``if` `(isSetBit(s, m)) {`   `        ``// store the current` `        ``// state of m in ans` `        ``ans = m;` `        ``r = m - 1;` `      ``}` `      ``else` `{` `        ``l = m + 1;` `      ``}` `    ``}`   `    ``// Returning the position` `    ``// of first set bit` `    ``return` `ans;` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main()` `  ``{` `    ``string` `s = ``"111"``;` `    ``int` `n = s.Length;` `    ``Console.Write(firstSetBit(s, n));` `  ``}` `}`   `// This code is contributed by sanjoy_62.`

## Javascript

 ``

## Python

 `# Python Program to find Position` `# Of leftmost set bit`   `# Function to find` `# A bit is set or not` `def` `isSetBit(s, i):` `    `  `    ``return` `s[i] ``=``=` `'1'`   `# Function to find` `# First set bit` `def` `firstSetBit(s, n):`   `    ``l ``=` `0` `    ``r ``=` `n` `    ``m ``=` `0` `    ``ans ``=` `-``1`   `    ``# Applying binary search` `    ``while` `(l <``=` `r):`   `        ``m ``=` `(l ``+` `r) ``/``/` `2` `        ``if` `(isSetBit(s, m)):`   `            ``# store the current` `            ``# state of m in ans` `            ``ans ``=` `m` `            ``r ``=` `m ``-` `1`   `        ``else``:` `            ``l ``=` `m ``+` `1`   `    ``# Returning the position` `    ``# of first set bit` `    ``return` `ans`   `# Driver code`   `s ``=` `"111"` `n ``=` `len``(s)` `print``(firstSetBit(s, n))`   `# This code is contributed by Samim Hossain Mondal.`

Output:

`0`

Time Complexity: O(LogN)
Auxiliary Space: o(1)

My Personal Notes arrow_drop_up
Related Articles