Проверьте, можно ли сделать все биты одинаковыми с помощью одного переворота
Учитывая двоичную строку, найдите, можно ли сделать все ее цифры равными (либо все нули, либо все единицы), перевернув ровно один бит.
Ввод: 101
Выход: Да
Объяснение: В 101 0 можно перевернуть
сделать все 1
Ввод: 11
Выход: Нет
Пояснение: какую бы цифру вы ни выбрали
переверните, вы не получите нужную строку.
Ввод: 1
Выход: Да
Объяснение: Мы можем перевернуть 1, чтобы все нулиМетод 1 (подсчет нулей и единиц)
Если все цифры строки можно сделать идентичными, выполнив ровно один переворот, это означает, что в строке все цифры равны друг другу, кроме этой цифры, которую нужно перевернуть, и эта цифра должна отличаться от всех других цифр строки. . Значение этой цифры может быть либо нулем, либо единицей. Следовательно, в этой строке будет либо ровно одна цифра, равная нулю, а все остальные цифры, равные единице, либо ровно одна цифра, равная единице, а все остальные цифры будут равны нулю.
Следовательно, нам нужно только проверить, есть ли в строке ровно одна цифра, равная нулю / единице, и если да, то ответ - да; в противном случае ответ отрицательный.
Below is the implementation of above idea.
C++
// C++ program to check if a sinle bit can// be flipped tp make all ones#include <bits/stdc++.h>using namespace std;// This function returns true if we can// bits same in given binary string str.bool canMakeAllSame(string str){ int zeros = 0, ones = 0; // Traverse through given string and // count numbers of 0"s and 1"s for (char ch : str) (ch == "0") ? ++zeros : ++ones; // Return true if any of the two counts // is 1 return (zeros == 1 || ones == 1);}// Driver codeint main(){ canMakeAllSame("101") ? printf("Yes
") : printf("No
"); return 0;} |
Java
// Java program to check if a single bit can// be flipped to make all onespublic class GFG { // This function returns true if we can // bits same in given binary string str. static boolean canMakeAllSame(String str) { int zeros = 0, ones = 0; // Traverse through given string and // count numbers of 0"s and 1"s for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch == "0") ++zeros; else ++ones; } // Return true if any of the two counts // is 1 return (zeros == 1 || ones == 1); } // Driver code public static void main(String args[]) { System.out.println(canMakeAllSame("101") ? "Yes" : "No"); }}// This code is contributed by Sumit Ghosh |
Python3
# python program to check if a sinle# bit can be flipped tp make all ones# This function returns true if we can# bits same in given binary string str.def canMakeAllSame(str): zeros = 0 ones = 0 # Traverse through given string and # count numbers of 0"s and 1"s for i in range(0, len(str)): ch = str[i]; if (ch == "0"): zeros = zeros + 1 else: ones = ones + 1 # Return true if any of the two # counts is 1 return (zeros == 1 or ones == 1);# Driver codeif(canMakeAllSame("101")): print("Yes
")else: print("No
")# This code is contributed by Sam007. |
C#
// C# program to check if a single bit can// be flipped to make all onesusing System;class GFG { // This function returns true if we can // bits same in given binary string str. static bool canMakeAllSame(string str) { int zeros = 0, ones = 0; // Traverse through given string and // count numbers of 0"s and 1"s for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == "0") ++zeros; else ++ones; } // Return true if any of the two counts // is 1 return (zeros == 1 || ones == 1); } // Driver code public static void Main() { Console.WriteLine(canMakeAllSame("101") ? "Yes" : "No"); }}// This code is contributed by Sam007 |
PHP
<?php// PHP program to check if a sinle bit can// be flipped tp make all ones // This function returns true if we can// bits same in given binary string str.function canMakeAllSame($str){ $zeros = 0; $ones = 0; // Traverse through given string and // count numbers of 0"s and 1"s for($i=0;$i<strlen($str);$i++) { $ch = $str[$i]; if ($ch == "0") ++$zeros ; else ++$ones; } // Return true if any of the two counts // is 1 return ($zeros == 1 || $ones == 1);} // Driver code if (canMakeAllSame("101") ) echo "Yes
" ; else echo "No
"; return 0;?> |
Javascript
<script>// Javascript program to check if a single bit can// be flipped to make all ones // This function returns true if we can // bits same in given binary string str. function canMakeAllSame(str) { let zeros = 0, ones = 0; // Traverse through given string and // count numbers of 0"s and 1"s for (let i = 0; i < str.length; i++) { let ch = str[i]; if (ch == "0") ++zeros; else ++ones; } // Return true if any of the two counts // is 1 return (zeros == 1 || ones == 1); } // Driver code document.write(canMakeAllSame("101") ? "Yes" : "No"); // This code is contributed by rag2127</script> |
Выход:
да
Сложность по времени: O (n), где n - длина строки.
Метод 2 (подсчет нулей и единиц)
Идея состоит в том, чтобы вычислить сумму всех битов. Если сумма равна n-1 или 1, тогда вывод будет истинным, иначе ложным. Это решение не требует сравнения в цикле.
Below is the implementation of above idea.
C++
// Check if all bits can be made same by single flip// Idea is to add the integer value all the elements// in the given string.// If the sum is 1 it indicates that there is// only single "1" in the string.// If the sum is 0 it indicates that there is only// single "0" in the string.// It takes O(n) time.#include <bits/stdc++.h>using namespace std;bool isOneFlip(string str){ int sum = 0; int n = str.length(); // Traverse through given string and // count the total sum of numbers for (int i = 0; i < n; i++) sum += str[i] - "0"; // Return true if any of the two counts // is 1 return (sum == n - 1 || sum == 1);}// Main functionint main(){ isOneFlip("101111111111") ? printf("Yes
") : printf("No
"); return 0;} |
Java
/*Check if all bits can be made same by singleflip. Idea is to add the integer value all theelements in the given string.If the sum is 1 it indicates that there is only single "1" in the string.If the sum is 0 it indicates that there is only single "0" in the string.It takes O(n) time.*/public class GFG { static boolean isOneFlip(String str) { int sum = 0; int n = str.length(); // Traverse through given string and // count the total sum of numbers for (int i = 0; i < n; i++) sum += str.charAt(i) - "0"; // Return true if any of the two counts // is 1 return (sum == n - 1 || sum == 1); } // Main function public static void main(String args[]) { System.out.println(isOneFlip("101111111111") ? "Yes" : "No"); }}// This code is contributed by Sumit Ghosh |
Python3
# Check if all bits can be made same# by single flip Idea is to add the# integer value all the elements in# the given string. If the sum is 1# it indicates that there is only# single "1" in the string. If the# sum is 0 it indicates that there# is only single "0" in the string.# It takes O(n) time.def isOneFlip(str): sum = 0 n = len(str) # Traverse through given string # and count the total sum of # numbers for i in range( 0, n ): sum += int(str[i]) - int("0") # Return true if any of the two # counts is 1 return (sum == n - 1 or sum == 1)# Main function(print("Yes") if isOneFlip("101111111111") else print("No"))# This code is contributed by Smitha |
C#
/*Check if all bits can be made same by single flip. Idea is to add the integer value all the elements in the given string. If the sum is 1 it indicates that there is only single "1" in the string. If the sum is 0 it indicates that there is only single "0" in the string. It takes O(n) time.*/using System;class GFG { static bool isOneFlip(string str) { int sum = 0; int n = str.Length; // Traverse through given string and // count the total sum of numbers for (int i = 0; i < n; i++) sum += str[i] - "0"; // Return true if any of the two counts // is 1 return (sum == n - 1 || sum == 1); } // Driver code public static void Main() { Console.WriteLine(isOneFlip("101111111111") ? "Yes" : "No"); }}// This code is contributed by Sam007 |
PHP
<?php// Check if all bits can be made same by// single flip Idea is to add the integer// value all the elements in the given// string. If the sum is 1 it indicates// that there is only single "1" in the// string. If the sum is 0 it indicates// that there is only single "0" in the// string. It takes O(n) time.function isOneFlip($str){ $sum = 0; $n = strlen($str); // Traverse through given string and // count the total sum of numbers for ( $i = 0; $i < $n; $i++) $sum += $str[$i] - "0"; // Return true if any of the two counts // is 1 return ($sum == $n - 1 || $sum == 1);}// Main function if(isOneFlip("101111111111") ) echo "Yes
"; else echo "No
";// This code is contributed by aj_36?> |
Javascript
<script>/*Check if all bits can be made same by singleflip. Idea is to add the integer value all theelements in the given string.If the sum is 1 it indicates that there is only single "1" in the string.If the sum is 0 it indicates that there is only single "0" in the string.It takes O(n) time.*/function isOneFlip(str){ let sum = 0; let n = str.length; // Traverse through given string and // count the total sum of numbers for(let i = 0; i < n; i++) sum += str[i] - "0"; // Return true if any of the two counts // is 1 return (sum == n - 1 || sum == 1);}// Driver codedocument.write(isOneFlip("101111111111") ? "Yes" : "No");// This code is contributed by avanitrachhadiya2155РЕКОМЕНДУЕМЫЕ СТАТЬИ |