从二进制字符串中删除一个元素,使XOR变为0的方法

2021年4月4日18:50:47 发表评论 980 次浏览

本文概述

给定一个二进制字符串, 任务是删除数组中的一个整数, 以使其余数字的XOR为零。任务是计算删除一个元素的方法数量, 以使该字符串的XOR变为零。

例子 :

Input : 10000
Output : 1
We only have 1 ways to 

Input : 10011
Output : 3
There are 3 ways to make XOR 0. We
can remove any of the three 1's.

Input : 100011100
Output : 5
There are 5 ways to make XOR 0. We
can remove any of the give 0's

一种简单的解决方案是一个一个地删除一个元素, 然后计算剩余字符串的XOR。并计算删除元素使XOR为0的出现次数。

An有效的解决方案基于以下事实。如果1的计数是奇数, 那么我们必须删除1才能使计数0, 并且我们可以删除任何1。如果1的计数为偶数, 则XOR为0, 我们可以删除任何0, 而XOR仍为0。

C ++

// C++ program to count number of ways to
// remove an element so that XOR of remaining
// string becomes 0.
#include <bits/stdc++.h>
using namespace std;
  
// Return number of ways in which XOR become ZERO
// by remove 1 element
int xorZero(string str)
{
     int one_count = 0, zero_count = 0;
     int n = str.length();
  
     // Counting number of 0 and 1
     for ( int i = 0; i < n; i++)
         if (str[i] == '1' )
             one_count++;
         else
             zero_count++;
      
     // If count of ones is even
     // then return count of zero
     // else count of one
     if (one_count % 2 == 0)
         return zero_count;
     return one_count;
}
  
// Driver Code
int main()
{
     string str = "11111" ;
     cout << xorZero(str) << endl;
     return 0;
}

Java

// Java program to count number of ways to
// remove an element so that XOR of remaining
// string becomes 0.
import java.util.*;
   
class CountWays
{
     // Returns number of ways in which XOR become
     // ZERO by remove 1 element
     static int xorZero(String s)
     {
         int one_count = 0 , zero_count = 0 ;
         char [] str=s.toCharArray();
         int n = str.length;
       
         // Counting number of 0 and 1
         for ( int i = 0 ; i < n; i++)
             if (str[i] == '1' )
                 one_count++;
             else
                 zero_count++;
           
         // If count of ones is even
         // then return count of zero
         // else count of one
         if (one_count % 2 == 0 )
             return zero_count;
         return one_count;
     }
  
     // Driver Code to test above function
     public static void main(String[] args)
     {
         String s = "11111" ;
         System.out.println(xorZero(s));  
     }
}
  
// This code is contributed by Mr. Somesh Awasthi

Python3

# Python 3 program to count number of 
# ways to remove an element so that 
# XOR of remaining string becomes 0.
  
# Return number of ways in which XOR 
# become ZERO by remove 1 element
def xorZero( str ):
     one_count = 0
     zero_count = 0
     n = len ( str )
  
     # Counting number of 0 and 1
     for i in range ( 0 , n, 1 ):
         if ( str [i] = = '1' ):
             one_count + = 1
         else :
             zero_count + = 1
      
     # If count of ones is even
     # then return count of zero
     # else count of one
     if (one_count % 2 = = 0 ):
         return zero_count
     return one_count
  
# Driver Code
if __name__ = = '__main__' :
     str = "11111"
     print (xorZero( str ))
  
# This code is contributed by
# Surendra_Gangwar

C#

// C# program to count number
// of ways to remove an element 
// so that XOR of remaining 
// string becomes 0.
using System;
  
class GFG
{
     // Returns number of ways 
     // in which XOR become
     // ZERO by remove 1 element
     static int xorZero( string s)
     {
         int one_count = 0, zero_count = 0;
          
         int n = s.Length;
      
         // Counting number of 0 and 1
         for ( int i = 0; i < n; i++)
             if (s[i] == '1' )
                 one_count++;
             else
                 zero_count++;
          
         // If count of ones is even
         // then return count of zero
         // else count of one
         if (one_count % 2 == 0)
             return zero_count;
         return one_count;
     }
  
     // Driver Code 
     public static void Main()
     {
         string s = "11111" ;
         Console.WriteLine(xorZero(s)); 
     }
}
  
// This code is contributed by anuj_67.

的PHP

<?php
// PHP program to count number 
// of ways to remove an element 
// so that XOR of remaining
// string becomes 0.
  
// Return number of ways in
// which XOR become ZERO
// by remove 1 element
  
function xorZero( $str )
{
     $one_count = 0; $zero_count = 0;
     $n = strlen ( $str );
  
     // Counting number of 0 and 1
     for ( $i = 0; $i < $n ; $i ++)
         if ( $str [ $i ] == '1' )
             $one_count ++;
         else
             $zero_count ++;
      
     // If count of ones is even
     // then return count of zero
     // else count of one
     if ( $one_count % 2 == 0)
         return $zero_count ;
     return $one_count ;
}
  
// Driver Code
$str = "11111" ;
echo xorZero( $str ), "\n" ;
  
// This code is contributed by aj_36
?>

输出:

5

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: