Back to all solutions

#1442 - Count Triplets That Can Form Two Arrays of Equal XOR

Problem Description

Given an array of integers arr.

We want to select three indices i, j and k where (0 <= i < j <= k < arr.length).

Let's define a and b as follows:

  • a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
  • b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]

Note that ^ denotes the bitwise-xor operation.

Return the number of triplets (i, j and k) Where a == b.

Solution

/**
 * @param {number[]} arr
 * @return {number}
 */
var countTriplets = function(arr) {
  const prefixXor = [0];
  let result = 0;

  for (const num of arr) {
    prefixXor.push(prefixXor[prefixXor.length - 1] ^ num);
  }

  for (let i = 0; i < arr.length; i++) {
    for (let k = i + 1; k < arr.length; k++) {
      if ((prefixXor[k + 1] ^ prefixXor[i]) === 0) {
        result += k - i;
      }
    }
  }

  return result;
};