Count Triplets That Can Form Two Arrays of Equal XOR

MediumArrayHash TableMathBit ManipulationPrefix Sum

Solution

export function countTriplets(arr: number[]): number {
  const n = arr.length;
  let answer = 0;
  let prefix = 0;
 
  const counts = new Map<number, number>([[0, 1]]);
  const totalCounts = new Map<number, number>();
 
  for (let i = 0; i < n; i++) {
    prefix ^= arr[i];
 
    const count = counts.get(prefix) ?? 0;
    counts.set(prefix, count + 1);
 
    const totalCount = totalCounts.get(prefix) ?? 0;
    totalCounts.set(prefix, totalCount + i + 1);
 
    answer += count * i - totalCount;
  }
 
  return answer;
}