在 JavaScript 中检查方程的有效性
javascriptweb developmentfront end technology
问题
我们需要编写一个 JavaScript 函数,该函数将数组 arr 作为第一个也是唯一的参数。
数组 arr 由以下两种类型之一的字符串方程组成 −
‘X ===Y’
X!==Y’
这里,X 和 Y 可以是任何变量。
我们的函数应该检查对于数组中的所有方程,我们是否可以分配一些数字,以便数组中的所有方程都得出 true。
例如,如果函数的输入是 −
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
那么输出应该是 −
const output = false;
输出说明:
无论我们为 X、Y 和 Z 选择什么值,这三个方程都永远无法满足。
示例
其代码为 −
const arr = ['X===Y', 'Y!==Z', 'X===Z']; const validateEquations = (arr = []) => { const map = {}; const len = {}; const inValids = []; const find = (item) => { while(map[item] && item !== map[item]){ map[item] = map[map[item]]; item = map[item]; }; return item; }; const add = (a, b) => { const first = find(a); const second = find(b); if(first === second){ return; }; if(len[first] < len[second]){ map[first] = second; len[second] += len[first]; }else{ map[second] = first; len[first] += len[second]; } } arr.forEach((item) => { const X = item[0]; const Y = item[4]; map[X] = map[X] || X; map[Y] = map[Y] || Y; len[X] = len[X] || 1; len[Y] = len[Y] || 1; if(item[1] === '!'){ inValids.push([X, Y]); }else{ add(X, Y); }; }); return inValids.every(([a, b]) => find(a) !== find(b)) }; console.log(validateEquations(arr));
输出
控制台中的输出将是 −
false