diff --git a/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go b/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go new file mode 100644 index 0000000..4d2b8f3 --- /dev/null +++ b/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go @@ -0,0 +1,26 @@ +package count_triplets_that_can_form_two_arrays_of_equal_xor + +func countTriplets(arr []int) int { + precomputePrefix := func() []int { + prefix := append([]int{0}, arr...) + + for i, _ := range arr { + prefix[i+1] ^= prefix[i] + } + + return prefix + } + + prefix := precomputePrefix() + + triplets := 0 + for left, _ := range prefix { + for right := left + 1; right < len(prefix); right++ { + if prefix[left] == prefix[right] { + triplets += right - left - 1 + } + } + } + + return triplets +}