Dada una string binaria str , la tarea es encontrar el número mínimo de operaciones requeridas para hacer que todos los caracteres de la string sean iguales, es decir, la string resultante contiene solo 0 o solo 1. En una sola operación, cualquier bloque de 0s consecutivos se puede convertir en un bloque de 1s consecutivos de la misma longitud y viceversa.
Ejemplos:
Entrada: str = “000111”
Salida: 1
En una sola operación, cambie todos los 0 a 1
o cambie todos los 1 a 0.
Entrada: str = “0011101010”
Salida: 3
Todos los 1 se pueden convertir a 0 en 3 operaciones.
Planteamiento: El problema es convertir todos los personajes en uno solo. Ahora, ya que convertir un grupo completo de caracteres consecutivos cuenta como un solo paso. Puede calcular el número de grupos diferentes separados entre sí debido a la presencia de otros caracteres entre ellos. Ahora el número de pasos sería simplemente el mínimo de ambos números. Por tanto, la respuesta será el mínimo de la cuenta de bloques consecutivos de 0s o la cuenta de bloques consecutivos de 1s.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the count of // minimum operations required int minOperations(string str, int n) { int count = 0; for (int i = 0; i < n - 1; i++) { // Increment count when consecutive // characters are different if (str[i] != str[i + 1]) count++; } // Answer is rounding off the // (count / 2) to lower return (count + 1) / 2; } // Driver code int main() { string str = "000111"; int n = str.length(); cout << minOperations(str, n); return 0; }
Java
// Java implementation of the approach class GFG { // Function to return the count of // minimum operations required static int minOperations(String str, int n) { int count = 0; for (int i = 0; i < n - 1; i++) { // Increment count when consecutive // characters are different if (str.charAt(i) != str.charAt(i + 1)) count++; } // Answer is rounding off the // (count / 2) to lower return (count + 1) / 2; } // Driver code public static void main(String[] args) { String str = "000111"; int n = str.length(); System.out.println(minOperations(str, n)); } } // This code is contributed by Princi Singh
Python3
# Python3 implementation of the approach # Function to return the count of # minimum operations required def minOperations(str, n): count = 0 for i in range(n - 1): # Increment count when consecutive # characters are different if (str[i] != str[i + 1]): count += 1 # Answer is rounding off the # (count / 2) to lower return (count + 1) // 2 # Driver code str = "000111" n = len(str) print(minOperations(str, n)) # This code is contributed # by Mohit Kumar
C#
// C# implementation of the approach using System; class GFG { // Function to return the count of // minimum operations required static int minOperations(string str, int n) { int count = 0; for (int i = 0; i < n - 1; i++) { // Increment count when consecutive // characters are different if (str[(i)] != str[(i + 1)]) count++; } // Answer is rounding off the // (count / 2) to lower return (count + 1) / 2; } // Driver code public static void Main() { string str = "000111"; int n = str.Length; Console.WriteLine(minOperations(str, n)); } } // This code is contributed by Code_Mech
Javascript
<script> //Javascript implementation of the approach // Function to return the count of // minimum operations required function minOperations(str, n) { var count = 0; for (var i = 0; i < n - 1; i++) { // Increment count when consecutive // characters are different if (str[i] != str[i + 1]) count++; } // Answer is rounding off the // (count / 2) to lower return (count + 1) / 2; } var str = "000111"; var n = str.length; document.write(minOperations(str, n)); // This code is contributed by SoumikMondal </script>
1
Publicación traducida automáticamente
Artículo escrito por ayushgoyal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA