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

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:11101Explanation:

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:1111Explanation:

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)