1442. 形成两个异或相等数组的三元组数目
欲求a==b,即有s[i-1]s[j-1]=s[j-1]s[k];
∵有s[j-1],∴有s[i-1]=s[k];
/*
* @lc app=leetcode.cn id=1442 lang=javascript
*
* [1442] 形成两个异或相等数组的三元组数目
/**
异或运算满足结合律和交换律,且任意数异或自身等于 0
找到异或的递推式=>推出Si=Sk+1
*/
var countTriplets = function(arr) {
let s=[],n=arr.length;
s[-1]=0;
// 异或前缀和 s[0~n-1]
for(let i=0;i<n;i++)
{
s[i]=s[i-1]^arr[i];
}
let ans=0;
// 异或性质:a^b=b^c 则有a==c,所以i-1==k即可
// for(let i=0;i<n;i++)
// {
// for(let j=i+1;j<n;j++)
// {
// for(let k=j;k<n;k++)
// {
// let a=s[i-1]^s[j-1];
// let b=s[j-1]^s[k];
// if(a==b) ans++;
// }
// }
// }
for(let i=0;i<n;i++)
{
for(let k=i+1;k<n;k++)
{
if(s[i-1]==s[k])
{
ans+=k-i;
}
}
}
return ans;
};
// @lc code=end