Given a binary array arr[], the task is to calculate the bitwise XOR of all the elements in this array and print it.
Examples:
Input: arr[] = {“100”, “1001”, “0011”}
Output: 1110
0100 XOR 1001 XOR 0011 = 1110
Input: arr[] = {“10”, “11”, “1000001”}
Output: 1000000
Approach:
- Step 1: First find the maximum-sized binary string.
- Step 2: Make all the binary strings in an array to the size of the maximum sized string, by adding 0s at the Most Significant Bit
- Step 3: Now find the resultant string by performing bitwise XOR on all the binary strings in the array.
For Examples:
- Let the binary array be {“100”, “001”, and “1111”}.
- Here the maximum sized binary string is 4.
- Make all the binary strings in the array of size 4, by adding 0s at the MSB. Now the binary array becomes {“0100”, “0001” and “1111”}
- Performing bitwise XOR on all the binary strings in the array
“0100” XOR “0001” XOR “1111” = “1110”
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void strBitwiseXOR(string* arr, int n)
{
string result;
int max_len = INT_MIN;
for ( int i = 0; i < n; i++) {
max_len = max(max_len,
( int )arr[i].size());
reverse(arr[i].begin(),
arr[i].end());
}
for ( int i = 0; i < n; i++) {
string s;
for ( int j = 0;
j < max_len - arr[i].size();
j++)
s += '0' ;
arr[i] = arr[i] + s;
}
for ( int i = 0; i < max_len; i++) {
int pres_bit = 0;
for ( int j = 0; j < n; j++)
pres_bit = pres_bit ^ (arr[j][i] - '0' );
result += (pres_bit + '0' );
}
reverse(result.begin(), result.end());
cout << result;
}
int main()
{
string arr[] = { "1000" , "10001" , "0011" };
int n = sizeof (arr) / sizeof (arr[0]);
strBitwiseXOR(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG{
static String reverse(String str)
{
String rev = "" ;
for ( int i = str.length() - 1 ; i >= 0 ; i--)
rev = rev + str.charAt(i);
return rev;
}
static String strBitwiseXOR(String[] arr, int n)
{
String result = "" ;
int max_len = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
{
max_len = Math.max(max_len,
( int )arr[i].length());
arr[i] = reverse(arr[i]);
}
for ( int i = 0 ; i < n; i++)
{
String s = "" ;
for ( int j = 0 ;
j < max_len - arr[i].length();
j++)
s += '0' ;
arr[i] = arr[i] + s;
}
for ( int i = 0 ; i < max_len; i++)
{
int pres_bit = 0 ;
for ( int j = 0 ; j < n; j++)
pres_bit = pres_bit ^
(arr[j].charAt(i) - '0' );
result += ( char )(pres_bit + '0' );
}
result = reverse(result);
return result;
}
public static void main(String[] args)
{
String[] arr = { "1000" , "10001" , "0011" };
int n = arr.length;
System.out.print(strBitwiseXOR(arr, n));
}
}
|
Python3
import sys
def strBitwiseXOR(arr, n):
result = ""
max_len = - 1
for i in range (n):
max_len = max (max_len, len (arr[i]))
arr[i] = arr[i][:: - 1 ]
for i in range (n):
s = ""
for j in range (max_len - len (arr[i])):
s + = "0"
arr[i] = arr[i] + s
for i in range (max_len):
pres_bit = 0
for j in range (n):
pres_bit = pres_bit ^ ( ord (arr[j][i]) - ord ( '0' ))
result + = chr ((pres_bit) + ord ( '0' ))
result = result[:: - 1 ]
print (result)
if (__name__ = = "__main__" ):
arr = [ "1000" , "10001" , "0011" ]
n = len (arr)
strBitwiseXOR(arr, n)
|
C#
using System;
class GFG{
static string reverse( string str)
{
string rev = "" ;
for ( int i = str.Length - 1; i >= 0; i--)
rev = rev + str[i];
return rev;
}
static string strBitwiseXOR( string [] arr, int n)
{
string result = "" ;
int max_len = int .MinValue;
for ( int i = 0; i < n; i++)
{
max_len = Math.Max(max_len,
( int )arr[i].Length);
arr[i] = reverse(arr[i]);
}
for ( int i = 0; i < n; i++)
{
string s = "" ;
for ( int j = 0;
j < max_len - arr[i].Length;
j++)
s += '0' ;
arr[i] = arr[i] + s;
}
for ( int i = 0; i < max_len; i++)
{
int pres_bit = 0;
for ( int j = 0; j < n; j++)
pres_bit = pres_bit ^
(arr[j][i] - '0' );
result += ( char )(pres_bit + '0' );
}
result = reverse(result);
return result;
}
public static void Main()
{
string [] arr = { "1000" , "10001" , "0011" };
int n = arr.Length;
Console.Write(strBitwiseXOR(arr, n));
}
}
|
Javascript
<script>
function strBitwiseXOR(arr, n)
{
var result = "" ;
var max_len = -1000000000;
for ( var i = 0; i < n; i++) {
max_len = Math.max(max_len,
arr[i].length);
arr[i] = arr[i].split( '' ).reverse().join( '' );
}
for ( var i = 0; i < n; i++) {
var s;
for ( var j = 0;
j < max_len - arr[i].length;
j++)
s += '0' ;
arr[i] = arr[i] + s;
}
for ( var i = 0; i < max_len; i++) {
var pres_bit = 0;
for ( var j = 0; j < n; j++)
pres_bit = pres_bit ^ (arr[j][i] - '0' .charCodeAt(0));
result += (pres_bit + '0' .charCodeAt(0));
}
result = result.split( '' ).reverse().join( '' );
document.write( result);
}
var arr = [ "1000" , "10001" , "0011" ];
var n = arr.length;
strBitwiseXOR(arr, n);
</script>
|
Time complexity: O(n*m) where n is the number of strings in the array, and m is the maximum length of any string in the array.
Space Complexity: O(n*m)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
18 Apr, 2023
Like Article
Save Article