检查是否可以用交替的 0 和 1 重新排列二进制字符串
给定一个长度为二进制的字符串,至少两个。我们需要检查是否可以重新排列二进制字符串,使 0 和 1 交替出现。如果可能,则输出为 YES,否则输出为 NO。
例子:
Input : 1011
Output : NO
We can’t rearrange the string such that it has alternate 0s and 1s.
Input : 1100
Output : YES
There are exactly two ways to rearrange the string, and they are 0101 or 1010 .
我们可以将所有 0 放在偶数位置,将所有 1 放在奇数位置,或者我们可以将所有 0 放在奇数位置,将所有 1 放在偶数位置。如果字符串的长度是偶数,那么为了满足给定的条件,1 和 0 的计数必须相等。如果字符串的长度是奇数,那么为了满足给定条件,计数的绝对差
1 和 0 必须为 1。
下面是上述方法的实现:
C++
// CPP program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
#include
using namespace std;
// function to check the binary string
bool is_possible(string s)
{
// length of string
int l = s.length();
int one = 0, zero = 0;
for (int i = 0; i < l; i++) {
// count zero's
if (s[i] == '0')
zero++;
// count one's
else
one++;
}
// if length is even
if (l % 2 == 0)
return (one == zero);
// if length is odd
else
return (abs(one - zero) == 1);
}
// Driver code
int main()
{
string s = "100110";
if (is_possible(s))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
import java.lang.Math;
public class GfG{
// function to check the binary string
public static boolean is_possible(String s)
{
// length of string
int l = s.length();
int one = 0, zero = 0;
for (int i = 0; i < l; i++) {
// count zero's
if (s.charAt(i) == '0')
zero++;
// count one's
else
one++;
}
// if length is even
if (l % 2 == 0)
return (one == zero);
// if length is odd
else
return (Math.abs(one - zero) == 1);
}
public static void main(String []args){
String s = "100110";
if (is_possible(s))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by Rituraj Jain
Python 3
# Python3 program to check if
# we can rearrange a
# string such that it has alternate
# 0s and 1s.
# function to check the binary string
def is_possible(s):
# length of string
l = len(s)
one = 0
zero = 0
for i in range(0,l) :
# count zero's
if (s[i] == '0'):
zero += 1
# count one's
else:
one += 1
# if length is even
if (l % 2 == 0) :
return (one == zero)
# if length is odd
else:
return (abs(one - zero) == 1)
# Driver code
if __name__ == "__main__":
s = "100110"
if (is_possible(s)):
print("Yes")
else:
print("No")
# This code is contributed by
# ChitraNayal
C#
// C# program to check if we can rearrange a
// string such that it has alternate 0s and 1s.
using System;
class GfG
{
// function to check the binary string
public static bool is_possible(String s)
{
// length of string
int l = s.Length;
int one = 0, zero = 0;
for (int i = 0; i < l; i++)
{
// count zero's
if (s[i] == '0')
zero++;
// count one's
else
one++;
}
// if length is even
if (l % 2 == 0)
return (one == zero);
// if length is odd
else
return (Math.Abs(one - zero) == 1);
}
// Driver code
public static void Main(String []args)
{
String s = "100110";
if (is_possible(s))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by Rajput-Ji
PHP
Javascript
输出:
Yes
时间复杂度: O(l),其中 l 是二进制字符串的长度。