Maximice el equivalente decimal cambiando solo un conjunto contiguo de 0

Dado un número binario en forma de string, la tarea es imprimir un equivalente binario obtenido al invertir solo un conjunto contiguo de 0 de modo que el equivalente decimal de este número binario sea el máximo.
Nota: No suponga ningún cero final al comienzo del número binario, es decir, «0101» se da como «101».
Ejemplos: 

Entrada: s = “10101” 
Salida: 11101 
Explicación: 
Aquí solo podemos voltear el segundo carácter de la string “10101” (= 21) que lo cambiará a “11101” (= 29). Dado que se nos permite voltear un subarreglo continuo, cualquier volteo adicional conducirá a una disminución en el equivalente decimal.
Entrada: s = “1000” 
Salida: 1111 
Explicación: 
Si volteamos los caracteres continuos desde la posición 1 hasta la 3, obtendremos 1111, que es el número máximo posible en 4 bits, es decir, 15. 

Planteamiento: Para resolver el problema mencionado anteriormente sabemos que tenemos que aumentar el valor del equivalente binario. Por lo tanto, debemos aumentar el número de 1 en la posición más alta . Claramente, podemos aumentar el valor del número simplemente volteando los ceros que aparecen inicialmente. Recorra la string y voltee la primera aparición de ceros hasta que ocurra un 1, en este caso, el ciclo debe romperse. Imprime la string resultante.
A continuación se muestra la implementación del enfoque anterior:
 

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>
Producción: 

111110001

 

Complejidad de tiempo: O(|s|)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por gargpriya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *