用 JavaScript 检查方程的有效性
问题
我们需要编写一个 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP