Dada una string binaria, la tarea es encontrar si todos los dígitos de la string pueden igualarse, es decir, 0 o 1, cambiando dos bits consecutivos cualquier número de veces.
Ejemplos:
Input: 01011 Output: YES Explanation: Flip 2nd and 3rd bit -> 00111, again flipping 1'st and 2'nd bit -> 11111 Input: 100011 Output: NO Explanation: No number of moves can ever equalize all elements of the array.
Enfoque:
con una observación cuidadosa, se puede alternar entre i-ésimo y j-ésimo bit alternando entre i-ésimo bit como (i, i+1), (i+1, i+2) …. (j-1, j) aquí cada bit se alterna dos veces (si el bit se alterna dos veces, entonces llega a su valor inicial) excepto i y j, luego, en última instancia, los bits i’th y j’th se alternan. Por lo tanto, se puede decir que solo no es posible hacer que todos los dígitos en una string binaria sean iguales cuando el conteo de 1 y 0 es impar.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the // above approach #include <bits/stdc++.h> using namespace std; // Function to check if // Binary string can be // made equal string canMake(string& s) { int o = 0, z = 0; // Counting occurrence of // zero and one in binary // string for (int i = 0; i < s.size(); i++) { if (s[i] - '0' == 1) o++; else z++; } // From above observation if (o % 2 == 1 && z % 2 == 1) return "NO"; else return "YES"; } // Driver code int main() { string s = "01011"; cout << canMake(s) << '\n'; return 0; }
Java
// Java program for the above approach class GFG { // Function to check if // Binary string can be // made equal static String canMake(String s) { int o = 0, z = 0; // Counting occurrence of // zero and one in binary // string for (int i = 0; i < s.length(); i++) { if (s.charAt(i) - '0' == 1) o++; else z++; } // From above observation if (o % 2 == 1 && z % 2 == 1) return "NO"; else return "YES"; } // Driver code public static void main (String[] args) { String s = "01011"; System.out.println(canMake(s)) ; } } // This code is contributed by AnkitRai01
Python3
# Python3 program for the above approach # Function to check if # Binary string can be # made equal def canMake(s) : o = 0; z = 0; # Counting occurrence of # zero and one in binary # string for i in range(len(s)) : if (ord(s[i]) - ord('0') == 1) : o += 1; else : z += 1; # From above observation if (o % 2 == 1 and z % 2 == 1) : return "NO"; else : return "YES"; # Driver code if __name__ == "__main__" : s = "01011"; print(canMake(s)); # This code is contributed by AnkitRai01
C#
// C# program for the above approach using System; class GFG { // Function to check if // Binary string can be // made equal static string canMake(string s) { int o = 0, z = 0; // Counting occurrence of // zero and one in binary // string for (int i = 0; i < s.Length; i++) { if (s[i] - '0' == 1) o++; else z++; } // From above observation if (o % 2 == 1 && z % 2 == 1) return "NO"; else return "YES"; } // Driver code public static void Main() { string s = "01011"; Console.WriteLine(canMake(s)) ; } } // This code is contributed by AnkitRai01
Javascript
<script> // javascript program for the above approach // Function to check if // Binary string can be // made equal function canMake(s) { var o = 0, z = 0; // Counting occurrence of // zero and one in binary // string for (i = 0; i < s.length; i++) { if (s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0) == 1) o++; else z++; } // From above observation if (o % 2 == 1 && z % 2 == 1) return "NO"; else return "YES"; } // Driver code var s = "01011"; document.write(canMake(s)) ; // This code is contributed by Rajput-Ji </script>
YES
Complejidad de tiempo: O(n), donde n es la longitud del número binario dado
Publicación traducida automáticamente
Artículo escrito por Ripunjoy Medhi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA