# 1442. Count Triplets That Can Form Two Arrays of Equal XOR solved in Rust

## Link

1442. Count Triplets That Can Form Two Arrays of Equal XOR

## Problem

The problem is asking to count the number of triplets `(i, j, k)`

such that `i < j <= k`

and `arr[i] ^ arr[i+1] ^ ... ^ arr[j-1] == arr[j] ^ arr[j+1] ^ ... ^ arr[k]`

.

Which means the XOR of the subarray `arr[i..j]`

is equal to the XOR of the subarray `arr[j..k+1]`

.

## Idea

To better understand the problem let's try to solve it using a brute force approach. We will treat XOR as any other math operation and try to find the triplets that satisfy the condition.

The brute force approach is to iterate over all the possible triplets and check if the XOR of the subarrays is equal. If it is, we will increment the result.

Time complexity of this approach is `O(n^4)`

. Highly inefficient.

```
// src/lib.rs
pub fn count_triplets(arr: Vec<i32>) -> i32 {
let len = arr.len();
let mut res = 0;
for i in 0..len {
for j in i + 1..len {
for k in j..len {
let mut a = 0;
let mut b = 0;
for idx in i..j {
a ^= arr[idx];
}
for idx in j..=k {
b ^= arr[idx]
}
if a == b {
res += 1
}
}
}
}
res
}
```

## Solution

In order to solve this problem efficiently, we need to understand the properties of the XOR operation. The XOR operation is commutative and associative. Which means `a ^ b == b ^ a`

and `a ^ (b ^ c) == (a ^ b) ^ c`

.

The XOR of a number with itself is `0`

. Which means `a ^ a == 0`

.

```
// src/lib.rs
pub struct Solution;
impl Solution {
pub fn count_triplets(arr: Vec<i32>) -> i32 {
let len = arr.len();
let mut res = 0;
for i in 0..len {
let mut cur_xor = arr[i];
for k in i + 1..len {
cur_xor ^= arr[k];
if cur_xor == 0 {
res += (k - i) as i32
}
}
}
res
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let scenarios = vec![(vec![2, 3, 1, 6, 7], 4), (vec![1, 1, 1, 1, 1], 10)];
scenarios
.into_iter()
.enumerate()
.for_each(|(idx, (input, expected))| {
let result = Solution::count_triplets(input);
assert_eq!(result, expected);
println!(" ✓ scenario {}", idx + 1)
});
}
}
```

## Analysis

The time complexity of this solution is `O(n^2)`

and the space complexity is `O(1)`

.