Open In App

Maximize the decimal equivalent by flipping only a contiguous set of 0s

Last Updated : 16 Nov, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given a binary number in the form of a string, the task is to print a binary equivalent obtained by flipping only one contiguous set of 0s such that the decimal equivalent of this binary number is maximum.
Note: Do not assume any trailing zeroes in the start of the binary number i.e. “0101” is given as “101”.
Examples: 

Input: s = “10101” 
Output: 11101 
Explanation: 
Here we can only flip the 2nd character of the string “10101” ( = 21) that will change it to “11101” (= 29). Since we are allowed to flip a continuous subarray, any more flipping will lead to decrease in decimal equivalent.
Input: s = “1000” 
Output: 1111 
Explanation: 
If we flip the continuous characters starting from position 1 till 3 we will get 1111 which is the maximum number possible in 4 bits i.e. 15. 

Approach: To solve the problem mentioned above we know that we have to increase the value of the binary equivalent. Therefore, we must increase the number of 1’s at higher position. Clearly, we can increase the value of the number by only flipping the initially occurring zeroes. Traverse the string and flip the first occurrence of zeroes until a 1 occurs, in this case, the loop must break. Print the resultant string.
Below is the implementation of the above approach:
 

C++




// C++ implementation to Maximize the value of
// the decimal equivalent given in the binary form
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the binary number
void flip(string& s)
{
    for (int i = 0; i < s.length(); i++) {
 
        // Check if the current number is 0
        if (s[i] == '0') {
 
            // Find the continuous 0s
            while (s[i] == '0') {
 
                // Replace initially
                // occurring 0 with 1
                s[i] = '1';
                i++;
            }
 
            // Break out of loop if 1 occurs
            break;
        }
    }
}
 
// Driver code
int main()
{
    string s = "100010001";
    flip(s);
 
    cout << s;
    return 0;
}


Java




// Java implementation to maximize the value of
// the decimal equivalent given in the binary form
import java.util.*;
 
class GFG{
 
// Function to print the binary number
static void flip(String s)
{
    StringBuilder sb = new StringBuilder(s);
    for(int i = 0; i < sb.length(); i++)
    {
        
       // Check if the current number is 0
       if (sb.charAt(i) == '0')
       {
            
           // Find the continuous 0s
           while (sb.charAt(i) == '0')
           {
                
               // Replace initially
               // occurring 0 with 1
               sb.setCharAt(i, '1');
               i++;
           }
            
           // Break out of loop if 1 occurs
           break;
       }
    }
    System.out.println(sb.toString());
}
 
// Driver code
public static void main(String[] args)
{
    String s = "100010001";
    flip(s);
}
}
 
// This code is contributed by offbeat


Python3




# Python3 implementation to
# Maximize the value of the
# decimal equivalent given
# in the binary form
 
# Function to print the binary
# number
def flip(s):
    s = list(s)
    for i in range(len(s)):
 
        # Check if the current number
        # is 0
        if(s[i] == '0'):
 
            # Find the continuous 0s
            while(s[i] == '0'):
 
                # Replace initially
                # occurring 0 with 1
                s[i] = '1'
                i += 1
            s = ''.join(map(str, s))
 
            # return the string and
            # break the loop
            return s
 
# Driver code
s = "100010001"
print(flip(s))
 
# This code is contributed by avanitrachhadiya2155


C#




// C# implementation to maximize the value of
// the decimal equivalent given in the binary form
using System;
 
class GFG{
 
// Function to print the binary number
static String flip(char []s)
{
    for(int i = 0; i < s.Length; i++)
    {
        
       // Check if the current number is 0
       if (s[i] == '0')
       {
            
           // Find the continuous 0s
           while (s[i] == '0')
           {
                
               // Replace initially
               // occurring 0 with 1
               s[i] = '1';
               i++;
           }
            
           // Break out of loop if 1 occurs
           break;
       }
    }
    return new String(s);
}
 
// Driver code
public static void Main(String[] args)
{
    String s = "100010001";
     
    Console.WriteLine(flip(s.ToCharArray()));
}
}
 
// This code is contributed by Rohit_ranjan


Javascript




<script>
 
    // JavaScript implementation to maximize the value of
    // the decimal equivalent given in the binary form
     
    // Function to print the binary number
    function flip(s)
    {
        for(let i = 0; i < s.length; i++)
        {
 
           // Check if the current number is 0
           if (s[i] == '0')
           {
 
               // Find the continuous 0s
               while (s[i] == '0')
               {
 
                   // Replace initially
                   // occurring 0 with 1
                   s[i] = '1';
                   i++;
               }
 
               // Break out of loop if 1 occurs
               break;
           }
        }
        return s.join("");
    }
     
    let s = "100010001";
      
    document.write(flip(s.split('')));
 
</script>


Output: 

111110001

 

Time Complexity: O(|s|)

Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads